diff --git a/latest.log b/latest.log index dc5b572..45a8d38 100644 --- a/latest.log +++ b/latest.log @@ -696,3 +696,110 @@ [2022-06-06 18:41:17] [DEBUG] GET from : 127.0.0.1 [2022-06-06 18:41:40] [DEBUG] GET from : 127.0.0.1 [2022-06-06 18:42:6] [DEBUG] GET from : 127.0.0.1 +[2022-06-07 16:28:55] + ███╗ ███╗███████╗██████╗ ██████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ █████╗ ██████╗ ██╗ + ████╗ ████║██╔════╝██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝ ██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗ ██╔══██╗██╔══██╗██║ + ██╔████╔██║█████╗ ██████╔╝██║ ██║ ██║██████╔╝ ╚████╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ███████║██████╔╝██║ + ██║╚██╔╝██║██╔══╝ ██╔══██╗██║ ██║ ██║██╔══██╗ ╚██╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ██╔══██║██╔═══╝ ██║ + ██║ ╚═╝ ██║███████╗██║ ██║╚██████╗╚██████╔╝██║ ██║ ██║ ╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝ ██║ ██║██║ ██║ + ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +[2022-06-07 16:29:5] [ERROR] Database error ! + Error: connect ETIMEDOUT + at Connection._handleConnectTimeout (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:409:13) + at Object.onceWrapper (node:events:645:28) + at Socket.emit (node:events:526:28) + at Socket._onTimeout (node:net:502:8) + at listOnTimeout (node:internal/timers:559:17) + at processTimers (node:internal/timers:502:7) + -------------------- + at Protocol._enqueue (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:144:48) + at Protocol.handshake (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:51:23) + at Connection.connect (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:116:18) + at Object. (/home/savalet/Documents/MercuryCloud_Dashboard/server.js:44:12) + at Module._compile (node:internal/modules/cjs/loader:1103:14) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10) + at Module.load (node:internal/modules/cjs/loader:981:32) + at Function.Module._load (node:internal/modules/cjs/loader:822:12) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) + at node:internal/main/run_main_module:17:47 +[2022-06-07 16:30:18] + ███╗ ███╗███████╗██████╗ ██████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ █████╗ ██████╗ ██╗ + ████╗ ████║██╔════╝██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝ ██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗ ██╔══██╗██╔══██╗██║ + ██╔████╔██║█████╗ ██████╔╝██║ ██║ ██║██████╔╝ ╚████╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ███████║██████╔╝██║ + ██║╚██╔╝██║██╔══╝ ██╔══██╗██║ ██║ ██║██╔══██╗ ╚██╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ██╔══██║██╔═══╝ ██║ + ██║ ╚═╝ ██║███████╗██║ ██║╚██████╗╚██████╔╝██║ ██║ ██║ ╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝ ██║ ██║██║ ██║ + ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +[2022-06-07 16:30:28] [ERROR] Database error ! + Error: connect ETIMEDOUT + at Connection._handleConnectTimeout (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:409:13) + at Object.onceWrapper (node:events:645:28) + at Socket.emit (node:events:526:28) + at Socket._onTimeout (node:net:502:8) + at listOnTimeout (node:internal/timers:559:17) + at processTimers (node:internal/timers:502:7) + -------------------- + at Protocol._enqueue (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:144:48) + at Protocol.handshake (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:51:23) + at Connection.connect (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:116:18) + at Object. (/home/savalet/Documents/MercuryCloud_Dashboard/server.js:44:12) + at Module._compile (node:internal/modules/cjs/loader:1103:14) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10) + at Module.load (node:internal/modules/cjs/loader:981:32) + at Function.Module._load (node:internal/modules/cjs/loader:822:12) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) + at node:internal/main/run_main_module:17:47 +[2022-06-07 16:31:10] + ███╗ ███╗███████╗██████╗ ██████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ █████╗ ██████╗ ██╗ + ████╗ ████║██╔════╝██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝ ██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗ ██╔══██╗██╔══██╗██║ + ██╔████╔██║█████╗ ██████╔╝██║ ██║ ██║██████╔╝ ╚████╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ███████║██████╔╝██║ + ██║╚██╔╝██║██╔══╝ ██╔══██╗██║ ██║ ██║██╔══██╗ ╚██╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ██╔══██║██╔═══╝ ██║ + ██║ ╚═╝ ██║███████╗██║ ██║╚██████╗╚██████╔╝██║ ██║ ██║ ╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝ ██║ ██║██║ ██║ + ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +[2022-06-07 16:31:20] [ERROR] Database error ! + Error: connect ETIMEDOUT + at Connection._handleConnectTimeout (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:409:13) + at Object.onceWrapper (node:events:645:28) + at Socket.emit (node:events:526:28) + at Socket._onTimeout (node:net:502:8) + at listOnTimeout (node:internal/timers:559:17) + at processTimers (node:internal/timers:502:7) + -------------------- + at Protocol._enqueue (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:144:48) + at Protocol.handshake (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:51:23) + at Connection.connect (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:116:18) + at Object. (/home/savalet/Documents/MercuryCloud_Dashboard/server.js:44:12) + at Module._compile (node:internal/modules/cjs/loader:1103:14) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10) + at Module.load (node:internal/modules/cjs/loader:981:32) + at Function.Module._load (node:internal/modules/cjs/loader:822:12) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) + at node:internal/main/run_main_module:17:47 +[2022-06-07 16:31:47] + + + + ███╗ ███╗███████╗██████╗ ██████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ █████╗ ██████╗ ██╗ + ████╗ ████║██╔════╝██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝ ██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗ ██╔══██╗██╔══██╗██║ + ██╔████╔██║█████╗ ██████╔╝██║ ██║ ██║██████╔╝ ╚████╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ███████║██████╔╝██║ + ██║╚██╔╝██║██╔══╝ ██╔══██╗██║ ██║ ██║██╔══██╗ ╚██╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ██╔══██║██╔═══╝ ██║ + ██║ ╚═╝ ██║███████╗██║ ██║╚██████╗╚██████╔╝██║ ██║ ██║ ╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝ ██║ ██║██║ ██║ + ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +[2022-06-07 16:31:57] [ERROR] Database error ! + Error: connect ETIMEDOUT + at Connection._handleConnectTimeout (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:409:13) + at Object.onceWrapper (node:events:645:28) + at Socket.emit (node:events:526:28) + at Socket._onTimeout (node:net:502:8) + at listOnTimeout (node:internal/timers:559:17) + at processTimers (node:internal/timers:502:7) + -------------------- + at Protocol._enqueue (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:144:48) + at Protocol.handshake (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/protocol/Protocol.js:51:23) + at Connection.connect (/home/savalet/Documents/MercuryCloud_Dashboard/node_modules/mysql/lib/Connection.js:116:18) + at Object. (/home/savalet/Documents/MercuryCloud_Dashboard/server.js:47:12) + at Module._compile (node:internal/modules/cjs/loader:1103:14) + at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10) + at Module.load (node:internal/modules/cjs/loader:981:32) + at Function.Module._load (node:internal/modules/cjs/loader:822:12) + at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) + at node:internal/main/run_main_module:17:47 diff --git a/node_modules/.bin/color-support b/node_modules/.bin/color-support deleted file mode 100644 index 59e6506..0000000 --- a/node_modules/.bin/color-support +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../color-support/bin.js" "$@" -else - exec node "$basedir/../color-support/bin.js" "$@" -fi diff --git a/node_modules/.bin/color-support b/node_modules/.bin/color-support new file mode 120000 index 0000000..fcbcb28 --- /dev/null +++ b/node_modules/.bin/color-support @@ -0,0 +1 @@ +../color-support/bin.js \ No newline at end of file diff --git a/node_modules/.bin/color-support.cmd b/node_modules/.bin/color-support.cmd deleted file mode 100644 index 005f9a5..0000000 --- a/node_modules/.bin/color-support.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\color-support\bin.js" %* diff --git a/node_modules/.bin/color-support.ps1 b/node_modules/.bin/color-support.ps1 deleted file mode 100644 index f5c9fe4..0000000 --- a/node_modules/.bin/color-support.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../color-support/bin.js" $args - } else { - & "$basedir/node$exe" "$basedir/../color-support/bin.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../color-support/bin.js" $args - } else { - & "node$exe" "$basedir/../color-support/bin.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime deleted file mode 100644 index 0a62a1b..0000000 --- a/node_modules/.bin/mime +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../mime/cli.js" "$@" -else - exec node "$basedir/../mime/cli.js" "$@" -fi diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 120000 index 0000000..fbb7ee0 --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd deleted file mode 100644 index 54491f1..0000000 --- a/node_modules/.bin/mime.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %* diff --git a/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1 deleted file mode 100644 index 2222f40..0000000 --- a/node_modules/.bin/mime.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args - } else { - & "$basedir/node$exe" "$basedir/../mime/cli.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../mime/cli.js" $args - } else { - & "node$exe" "$basedir/../mime/cli.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp deleted file mode 100644 index 6ba5765..0000000 --- a/node_modules/.bin/mkdirp +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@" -else - exec node "$basedir/../mkdirp/bin/cmd.js" "$@" -fi diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp new file mode 120000 index 0000000..017896c --- /dev/null +++ b/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/mkdirp.cmd b/node_modules/.bin/mkdirp.cmd deleted file mode 100644 index a865dd9..0000000 --- a/node_modules/.bin/mkdirp.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mkdirp\bin\cmd.js" %* diff --git a/node_modules/.bin/mkdirp.ps1 b/node_modules/.bin/mkdirp.ps1 deleted file mode 100644 index 911e854..0000000 --- a/node_modules/.bin/mkdirp.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args - } else { - & "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args - } else { - & "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/node-pre-gyp b/node_modules/.bin/node-pre-gyp deleted file mode 100644 index 004c3be..0000000 --- a/node_modules/.bin/node-pre-gyp +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../@mapbox/node-pre-gyp/bin/node-pre-gyp" "$@" -else - exec node "$basedir/../@mapbox/node-pre-gyp/bin/node-pre-gyp" "$@" -fi diff --git a/node_modules/.bin/node-pre-gyp b/node_modules/.bin/node-pre-gyp new file mode 120000 index 0000000..2946e6a --- /dev/null +++ b/node_modules/.bin/node-pre-gyp @@ -0,0 +1 @@ +../@mapbox/node-pre-gyp/bin/node-pre-gyp \ No newline at end of file diff --git a/node_modules/.bin/node-pre-gyp.cmd b/node_modules/.bin/node-pre-gyp.cmd deleted file mode 100644 index a2fc508..0000000 --- a/node_modules/.bin/node-pre-gyp.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@mapbox\node-pre-gyp\bin\node-pre-gyp" %* diff --git a/node_modules/.bin/node-pre-gyp.ps1 b/node_modules/.bin/node-pre-gyp.ps1 deleted file mode 100644 index ed297ff..0000000 --- a/node_modules/.bin/node-pre-gyp.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../@mapbox/node-pre-gyp/bin/node-pre-gyp" $args - } else { - & "$basedir/node$exe" "$basedir/../@mapbox/node-pre-gyp/bin/node-pre-gyp" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../@mapbox/node-pre-gyp/bin/node-pre-gyp" $args - } else { - & "node$exe" "$basedir/../@mapbox/node-pre-gyp/bin/node-pre-gyp" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/nopt b/node_modules/.bin/nopt deleted file mode 100644 index f1ec43b..0000000 --- a/node_modules/.bin/nopt +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../nopt/bin/nopt.js" "$@" -else - exec node "$basedir/../nopt/bin/nopt.js" "$@" -fi diff --git a/node_modules/.bin/nopt b/node_modules/.bin/nopt new file mode 120000 index 0000000..6b6566e --- /dev/null +++ b/node_modules/.bin/nopt @@ -0,0 +1 @@ +../nopt/bin/nopt.js \ No newline at end of file diff --git a/node_modules/.bin/nopt.cmd b/node_modules/.bin/nopt.cmd deleted file mode 100644 index a7f38b3..0000000 --- a/node_modules/.bin/nopt.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nopt\bin\nopt.js" %* diff --git a/node_modules/.bin/nopt.ps1 b/node_modules/.bin/nopt.ps1 deleted file mode 100644 index 9d6ba56..0000000 --- a/node_modules/.bin/nopt.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args - } else { - & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../nopt/bin/nopt.js" $args - } else { - & "node$exe" "$basedir/../nopt/bin/nopt.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/rimraf b/node_modules/.bin/rimraf deleted file mode 100644 index b816825..0000000 --- a/node_modules/.bin/rimraf +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../rimraf/bin.js" "$@" -else - exec node "$basedir/../rimraf/bin.js" "$@" -fi diff --git a/node_modules/.bin/rimraf b/node_modules/.bin/rimraf new file mode 120000 index 0000000..4cd49a4 --- /dev/null +++ b/node_modules/.bin/rimraf @@ -0,0 +1 @@ +../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/.bin/rimraf.cmd b/node_modules/.bin/rimraf.cmd deleted file mode 100644 index 13f45ec..0000000 --- a/node_modules/.bin/rimraf.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rimraf\bin.js" %* diff --git a/node_modules/.bin/rimraf.ps1 b/node_modules/.bin/rimraf.ps1 deleted file mode 100644 index 1716791..0000000 --- a/node_modules/.bin/rimraf.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../rimraf/bin.js" $args - } else { - & "$basedir/node$exe" "$basedir/../rimraf/bin.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../rimraf/bin.js" $args - } else { - & "node$exe" "$basedir/../rimraf/bin.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver deleted file mode 100644 index 77443e7..0000000 --- a/node_modules/.bin/semver +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" -else - exec node "$basedir/../semver/bin/semver.js" "$@" -fi diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 0000000..5aaadf4 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/node_modules/.bin/semver.cmd b/node_modules/.bin/semver.cmd deleted file mode 100644 index 9913fa9..0000000 --- a/node_modules/.bin/semver.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %* diff --git a/node_modules/.bin/semver.ps1 b/node_modules/.bin/semver.ps1 deleted file mode 100644 index 314717a..0000000 --- a/node_modules/.bin/semver.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args - } else { - & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../semver/bin/semver.js" $args - } else { - & "node$exe" "$basedir/../semver/bin/semver.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/sshpk-conv b/node_modules/.bin/sshpk-conv deleted file mode 100644 index ab33b1e..0000000 --- a/node_modules/.bin/sshpk-conv +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../sshpk/bin/sshpk-conv" "$@" -else - exec node "$basedir/../sshpk/bin/sshpk-conv" "$@" -fi diff --git a/node_modules/.bin/sshpk-conv b/node_modules/.bin/sshpk-conv new file mode 120000 index 0000000..a2a295c --- /dev/null +++ b/node_modules/.bin/sshpk-conv @@ -0,0 +1 @@ +../sshpk/bin/sshpk-conv \ No newline at end of file diff --git a/node_modules/.bin/sshpk-conv.cmd b/node_modules/.bin/sshpk-conv.cmd deleted file mode 100644 index 2bdc325..0000000 --- a/node_modules/.bin/sshpk-conv.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sshpk\bin\sshpk-conv" %* diff --git a/node_modules/.bin/sshpk-conv.ps1 b/node_modules/.bin/sshpk-conv.ps1 deleted file mode 100644 index a8e820e..0000000 --- a/node_modules/.bin/sshpk-conv.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args - } else { - & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args - } else { - & "node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/sshpk-sign b/node_modules/.bin/sshpk-sign deleted file mode 100644 index 87f8ae8..0000000 --- a/node_modules/.bin/sshpk-sign +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../sshpk/bin/sshpk-sign" "$@" -else - exec node "$basedir/../sshpk/bin/sshpk-sign" "$@" -fi diff --git a/node_modules/.bin/sshpk-sign b/node_modules/.bin/sshpk-sign new file mode 120000 index 0000000..766b9b3 --- /dev/null +++ b/node_modules/.bin/sshpk-sign @@ -0,0 +1 @@ +../sshpk/bin/sshpk-sign \ No newline at end of file diff --git a/node_modules/.bin/sshpk-sign.cmd b/node_modules/.bin/sshpk-sign.cmd deleted file mode 100644 index 7323578..0000000 --- a/node_modules/.bin/sshpk-sign.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sshpk\bin\sshpk-sign" %* diff --git a/node_modules/.bin/sshpk-sign.ps1 b/node_modules/.bin/sshpk-sign.ps1 deleted file mode 100644 index 0de3957..0000000 --- a/node_modules/.bin/sshpk-sign.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args - } else { - & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args - } else { - & "node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/sshpk-verify b/node_modules/.bin/sshpk-verify deleted file mode 100644 index c2d00d0..0000000 --- a/node_modules/.bin/sshpk-verify +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../sshpk/bin/sshpk-verify" "$@" -else - exec node "$basedir/../sshpk/bin/sshpk-verify" "$@" -fi diff --git a/node_modules/.bin/sshpk-verify b/node_modules/.bin/sshpk-verify new file mode 120000 index 0000000..bfd7e3a --- /dev/null +++ b/node_modules/.bin/sshpk-verify @@ -0,0 +1 @@ +../sshpk/bin/sshpk-verify \ No newline at end of file diff --git a/node_modules/.bin/sshpk-verify.cmd b/node_modules/.bin/sshpk-verify.cmd deleted file mode 100644 index b0c43cb..0000000 --- a/node_modules/.bin/sshpk-verify.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sshpk\bin\sshpk-verify" %* diff --git a/node_modules/.bin/sshpk-verify.ps1 b/node_modules/.bin/sshpk-verify.ps1 deleted file mode 100644 index 8370785..0000000 --- a/node_modules/.bin/sshpk-verify.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args - } else { - & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args - } else { - & "node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid deleted file mode 100644 index c3ec003..0000000 --- a/node_modules/.bin/uuid +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../uuid/dist/bin/uuid" "$@" -else - exec node "$basedir/../uuid/dist/bin/uuid" "$@" -fi diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid new file mode 120000 index 0000000..588f70e --- /dev/null +++ b/node_modules/.bin/uuid @@ -0,0 +1 @@ +../uuid/dist/bin/uuid \ No newline at end of file diff --git a/node_modules/.bin/uuid.cmd b/node_modules/.bin/uuid.cmd deleted file mode 100644 index 0f2376e..0000000 --- a/node_modules/.bin/uuid.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uuid\dist\bin\uuid" %* diff --git a/node_modules/.bin/uuid.ps1 b/node_modules/.bin/uuid.ps1 deleted file mode 100644 index 7804628..0000000 --- a/node_modules/.bin/uuid.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args - } else { - & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args - } else { - & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index de12f67..c5f41a2 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -5,12 +5,12 @@ "requires": true, "packages": { "node_modules/@devnote-dev/pterojs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devnote-dev/pterojs/-/pterojs-1.2.0.tgz", - "integrity": "sha512-Wjres4qZ0pq98fiQ6LYrIjNEa+Qesn1/o4dQffBXcrhDcvJ8yCP8fCRTTb3LvhbLtlAP6Th03Yf2lkjRZGIECA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@devnote-dev/pterojs/-/pterojs-1.4.2.tgz", + "integrity": "sha512-XmIjhyy5QF8Bg27nn6sUEMDx/2vGryR0glBk4rpK88unwXOIXCzR9DLep96rMS9LtUImPldevQ2Csi+jQDqqkw==", "dependencies": { - "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "node-fetch": "^2.6.7", + "ws": "^8.5.0" } }, "node_modules/@devnote-dev/pterojs/node_modules/node-fetch": { @@ -175,7 +175,7 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/asn1": { "version": "0.2.6", @@ -188,7 +188,7 @@ "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "engines": { "node": ">=0.8" } @@ -196,12 +196,12 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "engines": { "node": "*" } @@ -232,7 +232,7 @@ "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dependencies": { "tweetnacl": "^0.14.3" } @@ -246,23 +246,26 @@ } }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/brace-expansion": { @@ -287,10 +290,22 @@ "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/chownr": { "version": "2.0.0", @@ -349,9 +364,9 @@ } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -359,12 +374,12 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cross-fetch": { "version": "3.1.5", @@ -402,7 +417,7 @@ "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dependencies": { "assert-plus": "^1.0.0" }, @@ -429,7 +444,7 @@ "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } @@ -440,17 +455,21 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-libc": { "version": "2.0.1", @@ -463,7 +482,7 @@ "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -480,7 +499,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -490,7 +509,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -498,48 +517,49 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -556,7 +576,7 @@ "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" ] @@ -572,9 +592,9 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fetch-blob": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", "funding": [ { "type": "github", @@ -594,16 +614,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -613,7 +633,7 @@ "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "engines": { "node": "*" } @@ -653,7 +673,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -661,7 +681,7 @@ "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, "node_modules/fs-minipass": { "version": "2.1.0", @@ -679,6 +699,11 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -698,10 +723,23 @@ "node": ">=10" } }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { "assert-plus": "^1.0.0" } @@ -728,7 +766,7 @@ "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "engines": { "node": ">=4" } @@ -746,30 +784,52 @@ "node": ">=6" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -862,7 +922,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/isarray": { "version": "1.0.0", @@ -872,12 +932,12 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/json-schema": { "version": "0.4.0", @@ -892,7 +952,7 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/jsonwebtoken": { "version": "8.5.1", @@ -1032,7 +1092,7 @@ "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } @@ -1040,12 +1100,12 @@ "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } @@ -1062,19 +1122,19 @@ } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -1128,7 +1188,7 @@ "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/mysql": { "version": "2.18.1", @@ -1181,9 +1241,9 @@ } }, "node_modules/node-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.0.tgz", - "integrity": "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.5.tgz", + "integrity": "sha512-u7zCHdJp8JXBwF09mMfo2CL6kp37TslDl1KP3hRGTlCInBtag+UO3LGVy+NF0VzvnL3PVMpA2hXh1EtECFnyhQ==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -1238,10 +1298,18 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -1276,12 +1344,12 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/process-nextick-args": { "version": "2.0.1", @@ -1314,9 +1382,12 @@ } }, "node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -1333,12 +1404,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -1368,7 +1439,7 @@ "node_modules/readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "node_modules/request": { "version": "2.88.2", @@ -1471,23 +1542,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -1499,14 +1570,14 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -1522,6 +1593,19 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -1560,11 +1644,11 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/string_decoder": { @@ -1731,10 +1815,15 @@ "extsprintf": "^1.2.0" } }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, "node_modules/web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "engines": { "node": ">= 8" } @@ -1767,9 +1856,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "engines": { "node": ">=10.0.0" }, diff --git a/node_modules/@devnote-dev/pterojs/LICENSE b/node_modules/@devnote-dev/pterojs/LICENSE index 7ec4bcd..699aea2 100644 --- a/node_modules/@devnote-dev/pterojs/LICENSE +++ b/node_modules/@devnote-dev/pterojs/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Devonte +Copyright (c) 2021-2022 Devonte Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/node_modules/@devnote-dev/pterojs/README.md b/node_modules/@devnote-dev/pterojs/README.md index 7a34e9b..07b38a9 100644 --- a/node_modules/@devnote-dev/pterojs/README.md +++ b/node_modules/@devnote-dev/pterojs/README.md @@ -1,8 +1,6 @@ -

pterojs-logo

PteroJS

A better API wrapper for Pterodactyl

-

Logo design by aizakkusnail#1065 (Discord)

-

+

## About PteroJS is a flexible API wrapper designed to give developers full access over the Pterodactyl API. The library uses a class-based management structure often seen in popular packages like Discord.js which keeps code clean, efficient and practical for any use-case. @@ -23,9 +21,6 @@ const { PteroApp } = require('@devnote-dev/pterojs'); // Initialising the application const client = new PteroApp('your.domain.here', 'pterodactyl_api_key'); -// Connecting to Pterodactyl -client.connect(); - // Accessing information client.servers.fetch('evuk98yu').then(console.log); ``` @@ -41,16 +36,16 @@ const client = new PteroClient( { ws: true } ); -// Adding servers to listen for -client.addSocksetServer([ 'kgujg66h', 'avipgt6e' ]); +// Adding the server to listen for +const shard = client.addSocksetServer('kgujg66h'); // Listening to events -client.on('statusUpdate', (server, status) => { - console.log(`${server.name} status: ${status}`); +shard.on('statusUpdate', status => { + console.log(`server ${shard.id} status: ${status}`); }); -// Connecting to Pterodactyl -client.connect(); +// Connecting to the server +shard.connect(); ``` ## Contributing @@ -63,10 +58,11 @@ Please see the [todo list](https://github.com/PteroPackages/PteroJS/blob/main/TO ## Contributors * [Devonte](https://github.com/devnote-dev) - Owner, maintainer +* [Chelog](https://github.com/chelog) - Code contributor +* [Cain](https://github.com/cainthebest) - Code contributor * [Zumo](https://github.com/ZumoDev) - Tester * [Dino](https://github.com/DinoTheDevOfficial) - Tester -* [Cain](https://github.com/cainthebest) - Code contributor This repository is managed under the MIT license. -© 2021 devnote-dev +© 2021-2022 devnote-dev diff --git a/node_modules/@devnote-dev/pterojs/TODO.md b/node_modules/@devnote-dev/pterojs/TODO.md index 0afdd51..0ddf4a9 100644 --- a/node_modules/@devnote-dev/pterojs/TODO.md +++ b/node_modules/@devnote-dev/pterojs/TODO.md @@ -21,7 +21,7 @@ Want to contribute? Familiar with JS? You're already halfway there. Below are th ## Global Managers - [X] Implement helper functions for all the managers - [X] Create and implement all necessary submanagers ([Dashflo](https://dashflo.net/docs/api/pterodactyl/v1/#req_dc39cc65e67d47bd8fb37449a8559935)) -- [ ] Document all functions +- [X] Document all functions (resolved into others) - [X] Switch `AllocationManager#cache` to maps ## Global Structures @@ -30,10 +30,12 @@ Want to contribute? Familiar with JS? You're already halfway there. Below are th ## Misc. - [X] Add proper notes and annotations to JSDocs -- [ ] Overall testing of the package (priority) +- [X] Overall testing of the package (priority) - [X] TypeScript support (`index.d.ts`) - [X] Investigate incorrectly documented endpoints -- [ ] Implement tests in `/tests` (or move from `/test`) +- [X] Implement tests in `/tests` (or move from `/test`) +- [X] Remove deprecated `PteroUser#tfa` +- [X] Remove deprecated `Presets` util ## Feature Plans - [ ] Optional webhook client diff --git a/node_modules/@devnote-dev/pterojs/package.json b/node_modules/@devnote-dev/pterojs/package.json index e0cc1b3..4d8d2d5 100644 --- a/node_modules/@devnote-dev/pterojs/package.json +++ b/node_modules/@devnote-dev/pterojs/package.json @@ -1,6 +1,6 @@ { "name": "@devnote-dev/pterojs", - "version": "1.2.0", + "version": "1.4.2", "description": "A flexibile API wrapper for Pterodactyl", "main": "src/index.js", "scripts": { @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/PteroPackages/PteroJS#readme", "dependencies": { - "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "node-fetch": "^2.6.7", + "ws": "^8.5.0" } } diff --git a/node_modules/@devnote-dev/pterojs/src/application/ApplicationRequestManager.js b/node_modules/@devnote-dev/pterojs/src/application/ApplicationRequestManager.js deleted file mode 100644 index 5f3545e..0000000 --- a/node_modules/@devnote-dev/pterojs/src/application/ApplicationRequestManager.js +++ /dev/null @@ -1,69 +0,0 @@ -const fetch = require('node-fetch'); -const { RequestError, PteroAPIError } = require('../structures/Errors'); -const { version } = require('../../package.json'); - -/** - * The requests manager for the application API. This is not for public use. Using - * this manually may result in unwanted modifications of your Pterodactyl panel. - */ -class ApplicationRequestManager { - constructor(client) { - this.client = client - this.headers['Authorization'] = `Bearer ${client.auth}`; - } - - suspended = false; - headers = { - 'User-Agent': `Application PteroJS v${version}`, - 'Content-Type': 'application/json', - 'Accept': 'application/json' - } - - /** Sends a request to the Pterodactyl API. Returns a json object or an error if - * an unknown response code is received. - * @param {string} path The path to request. - * @param {?object} [params] Optional payload data (POST, PUT and PATCH). - * @param {string} [method] The method or HTTP verb to use. - * @returns {Promise} The response object, if any. - */ - async make(path, params, method = 'GET') { - if (this.client.ping === null) throw new Error('Attempted request before application was ready.'); - if (this.suspended) throw new RequestError('[429] Application is ratelimited.'); - const body = params?.raw ?? (params ? JSON.stringify(params) : null); - const data = await fetch(this.client.domain + path, { - method, - body, - headers: this.headers - }); - - if ([201, 204].includes(data.status)) return; - if (data.status === 200) return await data.json(); - if ([400, 404, 422].includes(data.status)) throw new PteroAPIError(await data.json()); - if (data.status === 401) throw new RequestError('[401] Unauthorized API request.'); - if (data.status === 403) throw new RequestError('[403] API Path forbidden.'); - if (data.status === 429) { - this.suspended = true; - setTimeout(() => this.suspended = false, 600000); - throw new RequestError('[429] Application is ratelimited, retrying in 10 minutes.'); - } - throw new RequestError(`Pterodactyl API returned an invalid or malformed payload (code: ${data.status}).`); - } - - /** - * Sends a ping request to the Pterodactyl API. - * Because the API has no "ping" endpoint, we use a forced error to receive a 404 response - * then check that it is a valid 404 error by the API and not a timeout response. - * @returns {Promise} - */ - async ping() { - try { - this.client.ping = -1; - await this.make('/api/application'); - } catch (err) { - if (!err?.code) throw new RequestError('Pterodactyl API is unavailable.'); - return true; - } - } -} - -module.exports = ApplicationRequestManager; diff --git a/node_modules/@devnote-dev/pterojs/src/application/ApplicationServerManager.js b/node_modules/@devnote-dev/pterojs/src/application/ApplicationServerManager.js index e18026e..e7b05e4 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/ApplicationServerManager.js +++ b/node_modules/@devnote-dev/pterojs/src/application/ApplicationServerManager.js @@ -1,9 +1,38 @@ const ApplicationServer = require('../structures/ApplicationServer'); const Dict = require('../structures/Dict'); const { PteroUser } = require('../structures/User'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class ApplicationServerManager { + /** + * Allowed filter arguments for application servers. + */ + static get FILTERS() { + return Object.freeze([ + 'name', 'uuid', 'uuidShort', + 'externalId', 'image' + ]); + } + + /** + * Allowed include arguments for application servers. + */ + static get INCLUDES() { + return Object.freeze([ + 'allocations', 'user', 'subusers', + 'nest', 'egg', 'variables', + 'location', 'node', 'databases' + ]); + } + + /** + * Allowed sort arguments for application servers. + */ + static get SORTS() { + return Object.freeze(['id', '-id', 'uuid', '-uuid']); + } + constructor(client) { this.client = client; this.cache = new Dict(); @@ -37,6 +66,7 @@ class ApplicationServerManager { if (this.client.options.servers.cache) res.forEach((v, k) => this.cache.set(k, v)); return res; } + const s = new ApplicationServer(this.client, data.attributes); if (this.client.options.servers.cache) this.cache.set(s.id, s); return s; @@ -48,16 +78,36 @@ class ApplicationServerManager { * * a number * * an object * - * Returns `null` if not found. + * Returns `undefined` if not found. * @param {string|number|object|ApplicationServer} obj The object to resolve from. * @returns {?ApplicationServer} The resolved server. */ resolve(obj) { if (obj instanceof ApplicationServer) return obj; - if (typeof obj === 'number') return this.cache.get(obj) || null; - if (typeof obj === 'string') return this.cache.find(s => s.name === obj) || null; + if (typeof obj === 'number') return this.cache.get(obj); + if (typeof obj === 'string') return this.cache.find(s => s.name === obj); if (obj.relationships?.servers) return this._patch(obj.relationships.servers); - return null; + return undefined; + } + + /** + * Returns a formatted URL to the server. + * @param {string|ApplicationServer} server The server or server identifier. + * @returns {string} The formatted URL. + */ + panelURLFor(server) { + if (server instanceof ApplicationServer) return server.panelURL; + return `${this.client.domain}/server/${server}`; + } + + /** + * Returns a formatted URL to the server in the admin panel. + * @param {number|ApplicationServer} server The server or server ID. + * @returns {string} The formatted URL. + */ + adminURLFor(server) { + if (server instanceof ApplicationServer) return server.adminURL; + return `${this.client.domain}/admin/servers/view/${server}`; } /** @@ -69,17 +119,15 @@ class ApplicationServerManager { * @returns {Promise>} The fetched server(s). */ async fetch(id, options = {}) { - if (id) { - if (options.force) { - const s = this.cache.get(id); - if (s) return Promise.resolve(s); - } - const data = await this.client.requests.make( - endpoints.servers.get(id) + joinParams(options.include) - ); - return this._patch(data); + if (id && !options.force) { + const s = this.cache.get(id); + if (s) return Promise.resolve(s); } - const data = await this.client.requests.make(endpoints.servers.main); + + const query = build(options, { include: ApplicationServerManager.INCLUDES }); + const data = await this.client.requests.get( + (id ? endpoints.servers.get(id) : endpoints.servers.main) + query + ); return this._patch(data); } @@ -89,7 +137,8 @@ class ApplicationServerManager { * Available query filters are: * * name * * uuid - * * identifier + * * uuidShort + * * identifier (alias for uuidShort) * * externalId * * image * @@ -98,20 +147,25 @@ class ApplicationServerManager { * * -id * * uuid * * -uuid + * + * @param {string} entity The entity (string) to query. + * @param {string} filter The filter to use for the query. + * @param {string} sort The order to sort the results in. + * @returns {Promise>} A dict of the quiried servers. */ async query(entity, filter, sort) { - if (filter && !['name', 'uuid', 'identifier', 'externalId', 'image'].includes(filter)) throw new Error('Invalid query filter.'); - if (sort && !['id', '-id', 'uuid', '-uuid'].includes(sort)) throw new Error('Invalid sort type.'); if (!sort && !filter) throw new Error('Sort or filter is required.'); - if (filter === 'identifier') filter = 'uuidShort'; if (filter === 'externalId') filter = 'external_id'; - const data = await this.client.requests.make( - endpoints.servers.main + - (filter ? `?filter[${filter}]=${entity}` : '') + - (sort && filter ? `&sort=${sort}` : '') + - (sort && !filter ? `?sort=${sort}` : '') + const { FILTERS, SORTS } = ApplicationServerManager; + const query = build( + { filter:[filter, entity], sort }, + { filters: FILTERS, sorts: SORTS } + ); + + const data = await this.client.requests.get( + endpoints.servers.main + query ); return this._patch(data); } @@ -151,9 +205,9 @@ class ApplicationServerManager { payload.limits = options.limits ?? this.defaultLimits; payload.feature_limits = options.featureLimits ?? this.defaultFeatureLimits; - await this.client.requests.make(endpoints.servers.main, payload, 'POST'); - const s = await this.query(payload.name, 'name'); - return s.first(); + await this.client.requests.post(endpoints.servers.main, payload); + const data = await this.query(payload.name, 'name', '-id'); + return data.find(s => s.name === payload.name); } /** @@ -164,8 +218,8 @@ class ApplicationServerManager { */ async delete(server, force = false) { if (server instanceof ApplicationServer) server = server.id; - await this.client.requests.make( - endpoints.servers.get(server) + (force ? '/force' : ''), null, 'DELETE' + await this.client.requests.delete( + endpoints.servers.get(server) + (force ? '/force' : '') ); this.cache.delete(server); return true; @@ -173,14 +227,3 @@ class ApplicationServerManager { } module.exports = ApplicationServerManager; - -function joinParams(params) { - if (!params || !params.length) return ''; - const valid = [ - 'allocations', 'user', 'subusers', - 'pack', 'nest', 'egg', 'variables', - 'location', 'node', 'databases' - ]; - params = params.filter(p => valid.includes(p)); - return '?include='+ params.toString(); -} diff --git a/node_modules/@devnote-dev/pterojs/src/application/NestEggsManager.js b/node_modules/@devnote-dev/pterojs/src/application/NestEggsManager.js index 5b48662..51b8d04 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/NestEggsManager.js +++ b/node_modules/@devnote-dev/pterojs/src/application/NestEggsManager.js @@ -1,7 +1,18 @@ const Dict = require('../structures/Dict'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class NestEggsManager { + /** + * Allowed include arguments for nest eggs. + */ + static get INCLUDES() { + return Object.freeze([ + 'nest', 'servers', 'config', + 'script', 'variables' + ]); + } + constructor(client) { this.client = client; @@ -9,6 +20,15 @@ class NestEggsManager { this.cache = new Dict(); } + /** + * Returns a formatted URL to the egg in the admin panel. + * @param {number} id The ID of the egg. + * @returns {string} The formatted URL. + */ + adminURLFor(id) { + return `${this.client.domain}/admin/nests/egg/${id}`; + } + /** * Fetches the eggs for the specified nest. * @param {number} nest The ID of the nest to fetch from. @@ -19,20 +39,16 @@ class NestEggsManager { * @returns {Promise>} The fetched egg(s). */ async fetch(nest, id, options = {}) { - if (id) { - if (options.force) { - const e = this.cache.get(id); - if (e) return Promise.resolve(e); - } - const data = await this.client.requests.make( - endpoints.nests.eggs.get(nest, id) + joinParams(options.include) - ); - this.cache.set(id, data.data.attributes); - return data.data.attributes; + if (id && !options.force) { + const e = this.cache.get(id); + if (e) return Promise.resolve(e); } - const data = await this.client.requests.make( - endpoints.nests.eggs.main(nest) + joinParams(options.include) + + const query = build(options, { include: NestEggsManager.INCLUDES }); + const data = await this.client.requests.get( + (id ? endpoints.nests.eggs.get(nest, id) : endpoints.nests.eggs.main(nest)) + query ); + const res = new Dict(); for (const egg of data.data) { this.cache.set(egg.attributes.id, egg.attributes); @@ -54,10 +70,3 @@ class NestEggsManager { } module.exports = NestEggsManager; - -function joinParams(params) { - if (!params) return ''; - const res = []; - params.forEach(p => res.push(['include', p])); - return '?'+ new URLSearchParams(res).toString(); -} diff --git a/node_modules/@devnote-dev/pterojs/src/application/NestManager.js b/node_modules/@devnote-dev/pterojs/src/application/NestManager.js index c945b38..32bd7dc 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/NestManager.js +++ b/node_modules/@devnote-dev/pterojs/src/application/NestManager.js @@ -1,12 +1,21 @@ const NestEggsManager = require('./NestEggsManager'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class NestManager { + /** + * Allowed include arguments for nests. + */ + static get INCLUDES() { + return Object.freeze(['eggs', 'servers']); + } + constructor(client) { this.client = client; /** @type {Set} */ this.cache = new Set(); + /** @type {NestEggsManager} */ this.eggs = new NestEggsManager(this.client); } @@ -26,9 +35,11 @@ class NestManager { updatedAt: o.updated_at ? new Date(o.updated_at) : null }); } + if (this.client.options.nests.cache) res.forEach(n => this.cache.add(n)); return res; } + data = data.attributes; res.add({ id: data.id, @@ -39,18 +50,32 @@ class NestManager { createdAt: new Date(data.created_at), updatedAt: data.updated_at ? new Date(data.updated_at) : null }); + if (this.client.options.nests.cache) res.forEach(n => this.cache.add(n)); return res; } /** - * Fetches a nest from the Pterodactyl API with an optional cache check. + * Returns a formatted URL to the nest in the admin panel. + * @param {number} id The ID of the nest. + * @returns {string} The formatted URL. + */ + adminURLFor(id) { + return `${this.client.domain}/admin/nests/view/${id}`; + } + + /** + * Fetches a nest from the Pterodactyl API. * @param {number} [id] The ID of the nest. + * @param {string[]} [include] Additional data to include about the nest. * @returns {Promise>} The fetched nests. */ - async fetch(id) { - if (id) return this._patch(await this.client.requests.make(endpoints.nests.get(id))); - return this._patch(await this.client.requests.make(endpoints.nests.main)); + async fetch(id, include = []) { + const query = build({ include }, { include: NestManager.INCLUDES }); + const data = await this.client.requests.get( + (id ? endpoints.nests.get(id) : endpoints.nests.main) + query + ); + return this._patch(data); } } @@ -66,5 +91,4 @@ module.exports = NestManager; * @property {string} description The description of the nest. * @property {Date} createdAt The date the nest was created. * @property {?Date} updatedAt The date the nest was last updated. - * @readonly */ diff --git a/node_modules/@devnote-dev/pterojs/src/application/NodeLocationManager.js b/node_modules/@devnote-dev/pterojs/src/application/NodeLocationManager.js index 63599e2..827c1e6 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/NodeLocationManager.js +++ b/node_modules/@devnote-dev/pterojs/src/application/NodeLocationManager.js @@ -1,7 +1,22 @@ const Dict = require('../structures/Dict'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class NodeLocationManager { + /** + * Allowed filter arguments for locations. + */ + static get FILTERS() { + return Object.freeze(['short', 'long']); + } + + /** + * Allowed include arguments for locations. + */ + static get INCLUDES() { + return Object.freeze(['nodes', 'servers']); + } + constructor(client) { this.client = client; @@ -22,9 +37,11 @@ class NodeLocationManager { updatedAt: o.updated_at ? new Date(o.updated_at) : null }); } + if (this.client.options.locations.cache) res.forEach((v, k) => this.cache.set(k, v)); return res; } + data = data.attributes; const loc = { id: data.id, @@ -33,6 +50,7 @@ class NodeLocationManager { createdAt: new Date(data.created_at), updatedAt: data.updated_at ? new Date(data.updated_at) : null } + if (this.client.options.locations.cache) this.cache.set(data.id, loc); return loc; } @@ -40,34 +58,80 @@ class NodeLocationManager { /** * Resolves a node location from an object. This can be: * * a number + * * a string * * an object * - * Returns `null` if not found. - * @param {number|object} obj The object to resolve from. + * Returns `undefined` if not found. + * @param {string|number|object} obj The object to resolve from. * @returns {?NodeLocation} The resolved node location. */ resolve(obj) { - if (typeof obj == 'number') return this.cache.get(obj) || null; - if (obj.relationships?.location?.attributes) return this._patch(obj.relationships.location); - return null; + if (typeof obj === 'number') return this.cache.get(obj); + if (typeof obj === 'string') return this.cache.find( + o => (o.short === obj) || (o.long === obj) + ); + if (obj.relationships?.location?.attributes) + return this._patch(obj.relationships.location); + + return undefined; + } + + /** + * Returns a formatted URL to the node location in the admin panel. + * @param {number} id The ID of the node location. + * @returns {string} The formatted URL. + */ + adminURLFor(id) { + return `${this.client.domain}/admin/locations/view/${id}`; } /** * Fetches a node location from the Pterodactyl API with an optional cache check. * @param {number} [id] The ID of the location. - * @param {boolean} [force] Whether to skip checking the cache and fetch directly. + * @param {object} [options] Additional fetch options. + * @param {boolean} [options.force] Whether to skip checking the cache and fetch directly. + * @param {string[]} [options.include] Additional data to include about the location. * @returns {Promise>} The fetched node location(s). */ - async fetch(id, force = false) { - if (id) { - if (!force) { - const l = this.cache.get(id); - if (l) return Promise.resolve(l); - } - const data = await this.client.requests.make(endpoints.locations.get(id)); - return this._patch(data); + async fetch(id, options = {}) { + if (id && !options.force) { + const loc = this.cache.get(id); + if (loc) return Promise.resolve(loc); } - const data = await this.client.requests.make(endpoints.locations.main); + + const query = build(options, { include: NodeLocationManager.INCLUDES }); + const data = await this.client.requests.get( + (id ? endpoints.locations.get(id) : endpoints.locations.main) + query + ); + return this._patch(data); + } + + /** + * Queries the API for a location (or locations) that match the specified query filter/sort. + * This does NOT check the cache first, it is a direct fetch from the API. + * Available filters: + * * short + * * long + * + * Available sort options: + * * id + * * -id + * + * @param {string} entity The entity to query. + * @param {string} [filter] The filter to use for the query. + * @param {string} [sort] The order to sort the results in. + * @returns {Promise>} A dict of the queried locations. + */ + async query(entity, filter, sort) { + if (!sort && !filter) throw new Error('Sort or filter is required.'); + + const query = build( + { filter:[filter, entity], sort }, + { filters: NodeLocationManager.FILTERS, sorts:['id'] } + ); + const data = await this.client.requests.get( + endpoints.locations.main + query + ); return this._patch(data); } @@ -79,10 +143,9 @@ class NodeLocationManager { */ async create(short, long) { return this._patch( - await this.client.requests.make( + await this.client.requests.post( endpoints.locations.main, - { short, long }, - 'POST' + { short, long } ) ); } @@ -96,9 +159,11 @@ class NodeLocationManager { * @returns {Promise} The updated node location instance. */ async update(id, options) { - if (!options.short && !options.long) throw new Error('Either short or long option is required.'); + if (!options.short && !options.long) + throw new Error('Either short or long option is required.'); + return this._patch( - await this.client.requests.make(endpoints.locations.get(id), options, 'PATCH') + await this.client.requests.patch(endpoints.locations.get(id), options) ); } @@ -108,7 +173,7 @@ class NodeLocationManager { * @returns {Promise} */ async delete(id) { - await this.client.requests.make(endpoints.locations.get(id), null, 'DELETE'); + await this.client.requests.delete(endpoints.locations.get(id)); this.cache.delete(id); return true; } @@ -118,12 +183,10 @@ module.exports = NodeLocationManager; /** * Represents a location on Pterodactyl. - * Location objects have little to no methodic usage so they are readonly. * @typedef {object} NodeLocation * @property {number} id The ID of the location. * @property {string} long The long location code. * @property {string} short The short location code (or country code). * @property {Date} createdAt The date the location was created. * @property {?Date} updatedAt The date the location was last updated. - * @readonly */ diff --git a/node_modules/@devnote-dev/pterojs/src/application/NodeManager.js b/node_modules/@devnote-dev/pterojs/src/application/NodeManager.js index 2d09b8f..054732d 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/NodeManager.js +++ b/node_modules/@devnote-dev/pterojs/src/application/NodeManager.js @@ -1,8 +1,30 @@ const Node = require('../structures/Node'); const Dict = require('../structures/Dict'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class NodeManager { + /** + * Allowed filter arguments for nodes. + */ + static get FILTERS() { + return Object.freeze(['uuid', 'name', 'fqdn', 'daemon_token_id']); + } + + /** + * Allowed include arguments for nodes. + */ + static get INCLUDES() { + return Object.freeze(['allocations', 'location', 'servers']); + } + + /** + * Allowed sort arguments for nodes. + */ + static get SORTS() { + return Object.freeze(['id', 'uuid', 'memory', 'disk']); + } + constructor(client) { this.client = client; @@ -17,14 +39,44 @@ class NodeManager { const n = new Node(this.client, o); res.set(n.id, n); } + if (this.client.options.nodes.cache) res.forEach((v, k) => this.cache.set(k, v)); return res; } + const n = new Node(this.client, data); if (this.client.options.nodes.cache) this.cache.set(n.id, n); return n; } + /** + * Resolves a node from an object. This can be: + * * a string + * * a number + * * an object + * + * Returns `undefined` if not found. + * @param {string|number|object|Node} obj The object to resolve from. + * @returns {?Node} The resolved node. + */ + resolve(obj) { + if (obj instanceof Node) return obj; + if (typeof obj === 'number') return this.cache.get(obj); + if (typeof obj === 'string') return this.cache.find(n => n.name === obj); + if (obj.relationships?.node) return this._patch(obj.relationships.node); + return undefined; + } + + /** + * Returns a formatted URL to the node in the admin panel. + * @param {number|Node} node The node or ID of the node. + * @returns {string} The formatted URL. + */ + adminURLFor(node) { + if (node instanceof Node) return node.adminURL; + return `${this.client.domain}/admin/nodes/view/${node}`; + } + /** * Fetches a node from the Pterodactyl API with an optional cache check. * @param {number} [id] The ID of the node. @@ -34,22 +86,56 @@ class NodeManager { * @returns {Promise>} The fetched node(s). */ async fetch(id, options = {}) { - if (id) { - if (!options.force) { - const n = this.cache.get(id); - if (n) return Promise.resolve(n); - } - const data = await this.client.requests.make( - endpoints.nodes.get(id) + joinParams(options.include) - ); - return this._patch(data); + if (id && !options.force) { + const n = this.cache.get(id); + if (n) return Promise.resolve(s); } - const data = await this.client.requests.make( - endpoints.nodes.main + joinParams(options.include) + + const query = build(options, { include: NodeManager.INCLUDES }); + const data = await this.client.requests.get( + (id ? endpoints.nodes.get(id) : endpoints.nodes.main) + query ); return this._patch(data); } + /** + * Queries the API for a node (or nodes) that match the specified query filter/sort. + * This does NOT check the cache first, it is a direct fetch from the API. + * Available filters: + * * uuid + * * name + * * fqdn + * * daemonTokenId + * + * Available sort options: + * * id + * * -id + * * uuid + * * -uuid + * * memory + * * -memory + * * disk + * * -disk + * + * @param {string} entity The entity to query. + * @param {string} filter The filter to use for the query. + * @param {string} sort The order to sort the results in. + * @returns {Promise>} A dict of the quiried nodes. + */ + async query(entity, filter, sort) { + if (!sort && !filter) throw new Error('Sort or filter is required.'); + if (filter === 'daemonTokenId') filter = 'daemon_token_id'; + + const { FILTERS, SORTS } = NodeManager; + const query = build( + { filter:[filter, entity], sort }, + { filters: FILTERS, sorts: SORTS } + ); + + const data = await this.client.requests.get(endpoints.nodes.main + query); + return this._patch(data); + } + /** * Creates a new Pterodactyl server node. * @param {object} options Node creation options. @@ -91,8 +177,8 @@ class NodeManager { payload.memory_overallocate = options.memory_overallocate ?? 0; payload.disk_overallocate = options.disk_overallocate ?? 0; - const data = await this.client.requests.make( - endpoints.nodes.main, payload, 'POST' + const data = await this.client.requests.post( + endpoints.nodes.main, payload ); return this._patch(data); } @@ -125,8 +211,8 @@ class NodeManager { payload.memory_overallocate = payload.overallocated_memory; payload.disk_overallocate = payload.overallocated_disk; - const data = await this.client.requests.make( - endpoints.nodes.get(id), payload, 'PATCH' + const data = await this.client.requests.patch( + endpoints.nodes.get(id), payload ); return this._patch(data); } @@ -138,16 +224,10 @@ class NodeManager { */ async delete(node) { if (node instanceof Node) node = node.id; - await this.client.requests.make(endpoints.nodes.get(node), null, 'DELETE'); + await this.client.requests.delete(endpoints.nodes.get(node)); this.cache.delete(node); return true; } } module.exports = NodeManager; - -function joinParams(params) { - if (!params || !params.length) return ''; - params = params.filter(p => ['allocations', 'location', 'servers'].includes(p)); - return '?include='+ params.toString(); -} diff --git a/node_modules/@devnote-dev/pterojs/src/application/PteroApp.js b/node_modules/@devnote-dev/pterojs/src/application/PteroApp.js index ed62d35..774af52 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/PteroApp.js +++ b/node_modules/@devnote-dev/pterojs/src/application/PteroApp.js @@ -1,10 +1,11 @@ -const ApplicationRequestManager = require('./ApplicationRequestManager'); const ApplicationServerManager = require('./ApplicationServerManager'); const NestManager = require('./NestManager'); +const NodeAllocationManager = require('./NodeAllocationManager'); const NodeLocationManager = require('./NodeLocationManager'); const NodeManager = require('./NodeManager'); const UserManager = require('./UserManager'); -const loader = require('../structures/configLoader'); +const RequestManager = require('../http/RequestManager'); +const loader = require('../util/configLoader'); /** * The base class for the Pterodactyl application API. @@ -21,6 +22,12 @@ class PteroApp { * @param {ApplicationOptions} [options] Additional application options. */ constructor(domain, auth, options = {}) { + if (!/https?\:\/\/(?:localhost\:\d{4}|[\w\.\-]{3,256})/gi.test(domain)) + throw new SyntaxError( + "Domain URL must start with 'http://' or 'https://' and "+ + 'must be bound to a port if using localhost.' + ); + /** * The domain for your Pterodactyl panel. This should be the main URL only * (not "/api"). Any additional paths will count as the API path. @@ -42,54 +49,45 @@ class PteroApp { */ this.options = loader.appConfig(options); - /** @type {?Date} */ - this.readyAt = null; - - /** @type {?number} */ - this.ping = null; - /** @type {UserManager} */ this.users = new UserManager(this); + /** @type {NodeManager} */ this.nodes = new NodeManager(this); + /** @type {NestManager} */ this.nests = new NestManager(this); + /** @type {ApplicationServerManager} */ this.servers = new ApplicationServerManager(this); + /** @type {NodeLocationManager} */ this.locations = new NodeLocationManager(this); - /** @type {ApplicationRequestManager} @internal */ - this.requests = new ApplicationRequestManager(this); + + /** @type {NodeAllocationManager} */ + this.allocations = new NodeAllocationManager(this); + + /** @type {RequestManager} @internal */ + this.requests = new RequestManager('application', domain, auth); } /** - * Sends a ping request to the API before performing additional startup requests. - * Attempting to use the application without connecting to the API will result - * in an error. + * Used for performing preload requests to Pterodactyl. * @returns {Promise} */ async connect() { - if (this.readyAt) return; - const start = Date.now(); - await this.requests.ping(); - this.ping = Date.now() - start; if (this.options.users.fetch && this.options.users.cache) await this.users.fetch(); if (this.options.nodes.fetch && this.options.nodes.cache) await this.nodes.fetch(); if (this.options.nests.fetch && this.options.nests.cache) await this.nests.fetch(); if (this.options.servers.fetch && this.options.servers.cache) await this.servers.fetch(); - if (this.options.locations.fetch && this.options.locations.cache) await this.locations.fetch(); - this.readyAt = Date.now(); + if (this.options.locations.fetch && this.options.locations.cache) + await this.locations.fetch(); + return true; } - /** - * Disconnects from the Pterodactyl API. - * @returns {void} - */ - async disconnect() { - if (!this.readyAt) return; - this.ping = null; - this.readyAt = null; + get ping() { + return this.requests._ping; } } diff --git a/node_modules/@devnote-dev/pterojs/src/application/UserManager.js b/node_modules/@devnote-dev/pterojs/src/application/UserManager.js index 035b18c..24d9019 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/UserManager.js +++ b/node_modules/@devnote-dev/pterojs/src/application/UserManager.js @@ -1,8 +1,26 @@ const { PteroUser } = require('../structures/User'); const Dict = require('../structures/Dict'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class UserManager { + /** + * Allowed filter arguments for users. + */ + static get FILTERS() { + return Object.freeze([ + 'email', 'uuid', 'uuidShort', + 'username', 'image', 'external_id' + ]); + } + + /** + * Allowed sort arguments for users. + */ + static get SORTS() { + return Object.freeze(['id', '-id', 'uuid', '-uuid']); + } + constructor(client) { this.client = client; @@ -18,9 +36,11 @@ class UserManager { const u = new PteroUser(this.client, o); res.set(u.id, u); } + if (this.client.options.users.cache) res.forEach((v, k) => this.cache.set(k, v)); return res; } + const u = new PteroUser(this.client, data.attributes); if (this.client.options.users.cache) this.cache.set(u.id, u); return u; @@ -32,16 +52,26 @@ class UserManager { * * a number * * an object * - * Returns `null` if not found. + * Returns `undefined` if not found. * @param {string|number|object|PteroUser} obj The object to resolve from. * @returns {?PteroUser} The resolved user. */ resolve(obj) { if (obj instanceof PteroUser) return obj; - if (typeof obj === 'number') return this.cache.get(obj) || null; - if (typeof obj === 'string') return this.cache.find(s => s.name === obj) || null; + if (typeof obj === 'number') return this.cache.get(obj); + if (typeof obj === 'string') return this.cache.find(s => s.name === obj); if (obj.relationships?.user) return this._patch(obj.relationships.user); - return null; + return undefined; + } + + /** + * Returns a formatted URL to the user in the admin panel. + * @param {number|PteroUser} user The user or ID of the user. + * @returns {string} The formatted URL. + */ + adminURLFor(user) { + if (user instanceof PteroUser) return user.adminURL; + return `${this.client.domain}/admin/users/view/${user}`; } /** @@ -53,18 +83,14 @@ class UserManager { * @returns {Promise>} The fetched user(s). */ async fetch(id, options = {}) { - if (id) { - if (!options.force) { - const u = this.cache.get(id); - if (u) return Promise.resolve(u); - } - const data = await this.client.requests.make( - endpoints.users.get(id) + (options.withServers ? '?include=servers' : '') - ); - return this._patch(data); + if (id && !options.force) { + const u = this.cache.get(id); + if (u) return Promise.resolve(u); } - const data = await this.client.requests.make( - endpoints.users.main + (options.withServers ? '?include=servers' : '') + + const data = await this.client.requests.get( + (id ? endpoints.users.get(id) : endpoints.users.main) + + (options.withServers ? '?include=servers' : '') ); return this._patch(data); } @@ -78,8 +104,12 @@ class UserManager { * @returns {Promise} The fetched user. */ async fetchExternal(id, options = {}) { - if (!options.force) for (const [, user] of this.cache) if (id === user.externalId) return user; - const data = await this.client.requests.make( + if (!options.force) { + const u = this.cache.filter(u => u.externalId === id); + if (u) return Promise.resolve(u); + } + + const data = await this.client.requests.get( endpoints.users.ext(id) + (options.withServers ? '?include=servers' : '') ); return this._patch(data); @@ -90,9 +120,12 @@ class UserManager { * Keep in mind this does NOT check the cache first, it will fetch from the API directly. * Available query filters are: * * email + * * name * * uuid - * * username + * * uuidShort + * * identifier (alias for uuidShort) * * externalId + * * image * * Available sort options are: * * id @@ -101,21 +134,22 @@ class UserManager { * * -uuid * * @param {string} entity The entity (string) to query. - * @param {string} [filter] The filter to use for the query (see above). - * @param {string} [sort] The order to sort the results in (see above). - * @returns {Promise>} A dict of the queried user(s). + * @param {string} [filter] The filter to use for the query. + * @param {string} [sort] The order to sort the results in. + * @returns {Promise>} A dict of the queried users. */ async query(entity, filter, sort) { - if (filter && !['email', 'uuid', 'username', 'externalId'].includes(filter)) throw new Error('Invalid query filter.'); - if (sort && !['id', '-id', 'uuid', '-uuid'].includes(sort)) throw new Error('Invalid sort type.'); - if (!sort && !filter) throw new Error('sort or filter is required to query'); + if (!sort && !filter) throw new Error('Sort or filter is required.'); + if (filter === 'identifier') filter = 'uuidShort'; if (filter === 'externalId') filter = 'external_id'; - const data = await this.client.requests.make( - endpoints.users.main + - (filter ? `?filter[${filter}]=${entity}` : "") + - (sort && filter ? `&sort=${sort}` : "") + - (sort && !filter ? `?sort=${sort}` : "") + + const { FILTERS, SORTS } = UserManager; + const query = build( + { filter:[filter, entity], sort }, + { filters: FILTERS, sorts: SORTS } ); + + const data = await this.client.requests.get(endpoints.users.main + query); return this._patch(data); } @@ -128,13 +162,12 @@ class UserManager { * @returns {Promise} The new user. */ async create(email, username, firstname, lastname) { - await this.client.requests.make( + await this.client.requests.post( endpoints.users.main, - { email, username, first_name: firstname, last_name: lastname }, - 'POST' + { email, username, first_name: firstname, last_name: lastname } ); - const u = await this.query(email, 'email'); - return u.first(); + const data = await this.query(email, 'email', '-id'); + return data.find(u => u.email === email); } /** @@ -162,10 +195,16 @@ class UserManager { if (options.lastname) lastname = options.lastname; if (options.language) language = options.language; - const data = await this.client.requests.make( + const data = await this.client.requests.patch( endpoints.users.get(id), - { email, username, first_name: firstname, last_name: lastname, language, password }, - 'PATCH' + { + email, + username, + first_name: firstname, + last_name: lastname, + language, + password + } ); return this._patch(data); } @@ -177,7 +216,7 @@ class UserManager { */ async delete(user) { if (user instanceof PteroUser) user = user.id; - await this.client.requests.make(endpoints.users.get(user), null, 'DELETE'); + await this.client.requests.delete(endpoints.users.get(user)); this.cache.delete(user); return true; } diff --git a/node_modules/@devnote-dev/pterojs/src/application/endpoints.js b/node_modules/@devnote-dev/pterojs/src/application/endpoints.js index 4928eb6..aac00ca 100644 --- a/node_modules/@devnote-dev/pterojs/src/application/endpoints.js +++ b/node_modules/@devnote-dev/pterojs/src/application/endpoints.js @@ -7,7 +7,11 @@ module.exports = { nodes:{ main: '/api/application/nodes', get: n => `/api/application/nodes/${n}`, - config: n => `/api/application/nodes/${n}/configuration` + config: n => `/api/application/nodes/${n}/configuration`, + allocations:{ + main: n => `/api/application/nodes/${n}/allocations`, + get: (n, a) => `/api/application/nodes/${n}/allocations/${a}` + } }, servers:{ main: '/api/application/servers', diff --git a/node_modules/@devnote-dev/pterojs/src/client/BackupManager.js b/node_modules/@devnote-dev/pterojs/src/client/BackupManager.js index 0ed0221..f816073 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/BackupManager.js +++ b/node_modules/@devnote-dev/pterojs/src/client/BackupManager.js @@ -28,6 +28,7 @@ class BackupManager { } return s; } + data = data.attributes; this.cache.set(data.uuid, { uuid: data.uuid, @@ -38,6 +39,7 @@ class BackupManager { createdAt: new Date(data.created_at), completedAt: data.completed_at ? new Date(data.completed_at) : null }); + return this.cache.get(data.uuid); } @@ -48,18 +50,15 @@ class BackupManager { * @returns {Promise>} The fetched backup(s). */ async fetch(id, force = false) { - if (id) { - if (!force) { - const b = this.cache.get(id); - if (b) return Promise.resolve(b); - } - const data = await this.client.requests.make( - endpoints.servers.backups.get(this.server.identifier, id) - ); - return this._patch(data); + if (id && !force) { + const b = this.cache.get(id); + if (b) return Promise.resolve(b); } - const data = await this.client.requests.make( - endpoints.servers.backups.main(this.server.identifier) + + const data = await this.client.requests.get( + id + ? endpoints.servers.backups.get(this.server.identifier, id) + : endpoints.servers.backups.main(this.server.identifier) ); return this._patch(data); } @@ -70,9 +69,9 @@ class BackupManager { */ async create() { return this._patch( - await this.client.requests.make( + await this.client.requests.post( endpoints.servers.backups.main(this.server.identifier), - {}, 'POST' + null ) ); } @@ -83,7 +82,7 @@ class BackupManager { * @returns {Promise} The download link. */ async download(id) { - const url = await this.client.requests.make( + const url = await this.client.requests.get( endpoints.servers.backups.download(this.server.identifier, id) ); return url.attributes.url; @@ -95,8 +94,8 @@ class BackupManager { * @returns {Promise} */ async delete(id) { - await this.client.requests.make( - endpoints.servers.backups.get(this.server.identifier, id), null, 'DELETE' + await this.client.requests.delete( + endpoints.servers.backups.get(this.server.identifier, id) ); this.cache.delete(id); return true; diff --git a/node_modules/@devnote-dev/pterojs/src/client/ClientRequestManager.js b/node_modules/@devnote-dev/pterojs/src/client/ClientRequestManager.js deleted file mode 100644 index 4ce7eff..0000000 --- a/node_modules/@devnote-dev/pterojs/src/client/ClientRequestManager.js +++ /dev/null @@ -1,73 +0,0 @@ -const fetch = require('node-fetch'); -const { RequestError, PteroAPIError } = require('../structures/Errors'); -const { version } = require('../../package.json'); - -/** - * The requests manager for the client API. This is not for public use. Using - * this manually may result in unwanted modifications of your Pterodactyl - * servers and/or account. - */ -class ClientRequestManager { - constructor(client) { - this.client = client - this.headers['Authorization'] = `Bearer ${client.auth}`; - } - - suspended = false; - headers = { - 'User-Agent': `Client PteroJS v${version}`, - 'Content-Type': 'application/json', - 'Accept': 'application/json' - } - - /** Sends a request to the Pterodactyl API. Returns a json object or an error if - * an unknown response code is received. - * @param {string} path The path to request. - * @param {?object} [params] Optional payload data (POST, PUT and PATCH). - * @param {string} [method] The method or HTTP verb to use. - * @returns {Promise} The response object, if any. - */ - async make(path, params, method = 'GET') { - if (this.client.ping === null) throw new Error('Attempted request before client was ready.'); - if (this.suspended) throw new RequestError('[429] Client is ratelimited.'); - const body = params?.raw ?? (params ? JSON.stringify(params) : null); - const data = await fetch(this.client.domain + path, { - method, - body, - headers: this.headers - }); - - if ([201, 204].includes(data.status)) return; - if (data.status === 200) { - if (data.headers.get('content-type').startsWith('application/json')) return await data.json(); - return await data.buffer(); - } - if ([400, 404, 422].includes(data.status)) throw new PteroAPIError(await data.json()); - if (data.status === 401) throw new RequestError('[401] Unauthorized API request.'); - if (data.status === 403) throw new RequestError('[403] API Path forbidden.'); - if (data.status === 429) { - this.suspended = true; - setTimeout(() => this.suspended = false, 600000); - throw new RequestError('[429] Client is ratelimited, retrying in 10 minutes.'); - } - throw new RequestError(`Pterodactyl API returned an invalid or malformed payload (code: ${data.status}).`); - } - - /** - * Sends a ping request to the Pterodactyl API. - * Because the API has no "ping" endpoint, we use a forced error to receive a 404 response - * then check that it is a valid 404 error by the API and not a timeout response. - * @returns {Promise} - */ - async ping() { - try { - this.client.ping = -1; - await this.make('/api/client'); - } catch (err) { - if (!err?.code) throw new RequestError('Pterodactyl API is unavailable.'); - return true; - } - } -} - -module.exports = ClientRequestManager; diff --git a/node_modules/@devnote-dev/pterojs/src/client/ClientServerManager.js b/node_modules/@devnote-dev/pterojs/src/client/ClientServerManager.js index 7c0d3aa..2012159 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/ClientServerManager.js +++ b/node_modules/@devnote-dev/pterojs/src/client/ClientServerManager.js @@ -1,8 +1,16 @@ const ClientServer = require('../structures/ClientServer'); const Dict = require('../structures/Dict'); +const build = require('../util/query'); const endpoints = require('./endpoints'); class ClientServerManager { + /** + * Allowed include arguments for client servers. + */ + static get INCLUDES() { + return Object.freeze(['egg', 'subusers']); + } + constructor(client) { this.client = client @@ -21,9 +29,11 @@ class ClientServerManager { const s = new ClientServer(this.client, o); res.set(s.identifier, s); } + if (this.client.options.servers.cache) res.forEach((v, k) => this.cache.set(k, v)); return res; } + const s = new ClientServer(this.client, data); if (this.client.options.servers.cache) this.cache.set(s.identifier, s); return s; @@ -41,6 +51,16 @@ class ClientServerManager { } } + /** + * Returns a formatted URL to the server. + * @param {string|ClientServer} server The server or identifier of the server. + * @returns {string} The formatted URL. + */ + panelURLFor(server) { + if (server instanceof ClientServer) return server.panelURL; + return `${this.client.domain}/server/${server}`; + } + /** * Fetches a server (or all if no id is specified) from the Pterodactyl API. * @param {string} [id] The ID of the server. @@ -55,13 +75,11 @@ class ClientServerManager { const s = this.cache.get(id); if (s) return Promise.resolve(s); } - const data = await this.client.requests.make( - endpoints.servers.get(id) + joinParams(options.include) - ); - return this._patch(data); } - const data = await this.client.requests.make( - endpoints.main + joinParams(options.include) + + const query = build(options, { includes: ClientServerManager.INCLUDES }); + const data = await this.client.requests.get( + (id ? endpoints.servers.get(id) : endpoints.servers.main) + query ); return this._patch(data); } @@ -69,12 +87,6 @@ class ClientServerManager { module.exports = ClientServerManager; -function joinParams(params) { - if (!params || !params.length) return ''; - params = params.filter(p => ['egg', 'subusers'].includes(p)); - return '?include='+ params.toString(); -} - /** * @typedef {object} PageData * @property {number} current The current page. diff --git a/node_modules/@devnote-dev/pterojs/src/client/PteroClient.js b/node_modules/@devnote-dev/pterojs/src/client/PteroClient.js index 1cd9cfc..f9f8be4 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/PteroClient.js +++ b/node_modules/@devnote-dev/pterojs/src/client/PteroClient.js @@ -1,17 +1,18 @@ const { EventEmitter } = require('events'); -const ClientRequestManager = require('./ClientRequestManager'); const ClientServerManager = require('./ClientServerManager'); const { ClientUser } = require('../structures/User'); +const RequestManager = require('../http/RequestManager'); const ScheduleManager = require('./ScheduleManager'); const WebSocketManager = require('./ws/WebSocketManager'); const endpoints = require('./endpoints'); -const loader = require('../structures/configLoader'); +const loader = require('../util/configLoader'); +const Shard = require('./ws/Shard'); /** * The base class for the Pterodactyl client API. * This operates using a Pterodactyl user access token which can be found at * . - * + * * The access token will grant you access to your servers only, with the option * to fetch node and API key information and establish websockets to your servers. * @extends {EventEmitter} @@ -25,6 +26,12 @@ class PteroClient extends EventEmitter { constructor(domain, auth, options = {}) { super(); + if (!/https?\:\/\/(?:localhost\:\d{4}|[\w\.\-]{3,256})/gi.test(domain)) + throw new SyntaxError( + "Domain URL must start with 'http://' or 'https://' and "+ + 'must be bound to a port if using localhost.' + ); + /** * The domain for your Pterodactyl panel. This should be the main URL only * (not "/api"). Any additional paths will count as the API path. @@ -46,80 +53,76 @@ class PteroClient extends EventEmitter { */ this.options = loader.clientConfig(options); - /** @type {?Date} */ - this.readyAt = null; - - /** @type {?number} */ - this.ping = null; - - /** @type {?ClientUser} */ + /** @type {ClientUser} */ this.user = null; /** @type {ClientServerManager} */ this.servers = new ClientServerManager(this); + /** @type {ScheduleManager} */ this.schedules = new ScheduleManager(this); - /** @type {ClientRequestManager} @internal */ - this.requests = new ClientRequestManager(this); - /** @type {WebSocketManager} @internal */ + + /** @type {RequestManager} @internal */ + this.requests = new RequestManager('Client', this.domain, this.auth); + + /** @type {WebSocketManager} */ this.ws = new WebSocketManager(this); } /** - * Sends a ping request to the API before performing additional startup requests - * as well as any websocket connections. Attempting to use the application without - * connecting to the API will result in an error. + * Performs preload requests to Pterodactyl and launches websocket connections. * @returns {Promise} * @fires PteroClient#ready */ async connect() { - if (this.readyAt) return; - const start = Date.now(); - await this.requests.ping(); - this.ping = Date.now() - start; - if (this.options.fetchClient) this.user = await this.fetchClient(); + if (this.options.fetchClient) await this.fetchClient(); if (this.options.servers.fetch && this.options.servers.cache) await this.servers.fetch(); - if (this.options.ws) await this.ws.launch(); - this.readyAt = Date.now(); + return true; } + get ping() { + return this.requests._ping; + } + /** * Fetches the client user's account. This will contain information such as 2FA * recovery tokens, API keys and email data. * @returns {Promise} The client user. */ async fetchClient() { - const data = await this.requests.make(endpoints.account.main); - return new ClientUser(this, data.attributes); + const data = await this.requests.get(endpoints.account.main); + this.user = new ClientUser(this, data.attributes); + return this.user; } /** * Adds a server or an array of servers to be connected to websockets. - * @param {string|string[]} ids The identifier of the server, or an array of server identifiers. - * @returns {void} + * @param {string[] | string} ids The identifier(s) of the server. + * @returns {Shard|Shard[]} Created (or reused) shard(s). */ addSocketServer(ids) { - Array.isArray(ids) ? this.ws.servers.push(...ids) : this.ws.servers.push(ids); + if (typeof ids === 'string') + return this.ws.createShard(ids); + else if (ids instanceof Array) + return ids.map(id => this.ws.createShard(id)) } /** * Removes a server from websocket connections. * @param {string} id The identifier of the server. - * @returns {void} + * @returns {boolean} Whether shard was removed. */ removeSocketServer(id) { - this.ws.servers.splice(id); + return this.ws.removeShard(id); } /** - * Disconnects from the Pterodactyl API and closes any existing websocket connections. + * Closes any existing websocket connections. * @returns {void} */ disconnect() { - this.ping = null; - this.readyAt = null; - if (!this.ws.readyAt) this.ws.destroy(); + if (this.ws.readyAt) this.ws.destroy(); } } @@ -135,7 +138,6 @@ module.exports = PteroClient; /** * Startup options for the client API. * @typedef {object} ClientOptions - * @property {boolean} [ws] Whether to enable server websocket connections (default: `false`). * @property {boolean} [fetchClient] Whether to fetch the client user (default `true`). * @property {OptionSpec} [servers] Options for fetching and caching servers. * @property {OptionSpec} [subUsers] Options for fetching and caching server subusers. diff --git a/node_modules/@devnote-dev/pterojs/src/client/ScheduleManager.js b/node_modules/@devnote-dev/pterojs/src/client/ScheduleManager.js index 1af5459..c908255 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/ScheduleManager.js +++ b/node_modules/@devnote-dev/pterojs/src/client/ScheduleManager.js @@ -17,11 +17,13 @@ class ScheduleManager { const s = new Schedule(this.client, id, o); res.set(s.id, s); } + let c = this.cache.get(id); if (c) res.forEach((v, k) => c.set(k, v)); else c = res; this.cache.set(id, c); return res; } + const s = new Schedule(this.client, id, data); let c = this.cache.get(id); if (c) c.set(s.id, s); else c = new Dict().set(s.id, s); @@ -29,6 +31,17 @@ class ScheduleManager { return s; } + /** + * Returns a formatted URL to the schedule. + * @param {string} id The identifier of the server. + * @param {string|Schedule} schedule The schedule or identifier of the schedule. + * @returns {string} The formatted URL. + */ + panelURLFor(id, schedule) { + if (schedule instanceof Schedule) return schedule.panelURL; + return `${this.client.domain}/server/${id}/schedules/${schedule}`; + } + /** * Fetches a schedule or all schedules from a specified server (with optional cache check). * @param {string} server The identifier of the server. @@ -37,18 +50,15 @@ class ScheduleManager { * @returns {Promise>} The fetched schedule(s). */ async fetch(server, id, force) { - if (id) { - if (!force) { - const sch = this.cache.get(server)?.get(id); - if (sch) return sch; - } - const data = await this.client.requests.make( - endpoints.servers.schedules.get(server, id) - ); - return this._patch(server, data); + if (id && !force) { + const s = this.cache.get(server)?.get(id); + if (s) return s; } - const data = await this.client.requests.make( - endpoints.servers.schedules.main(server) + + const data = await this.client.requests.get( + id + ? endpoints.servers.schedules.get(id) + : endpoints.servers.schedules.main ); return this._patch(server, data); } @@ -66,7 +76,8 @@ class ScheduleManager { * @returns {Promise} The new schedule. */ async create(server, options = {}) { - if (Object.keys(options).length < 4) throw new Error('Missing required Schedule creation option.'); + if (Object.keys(options).length < 4) + throw new Error('Missing required Schedule creation option.'); const payload = {}; payload.name = options.name; @@ -76,8 +87,8 @@ class ScheduleManager { payload.day_of_week = options.dayOfWeek || '*'; payload.day_of_month = options.dayOfMonth || '*'; - const data = await this.client.requests.make( - endpoints.servers.schedules.main(server), payload, 'POST' + const data = await this.client.requests.post( + endpoints.servers.schedules.main(server), payload ); return this._patch(data); } @@ -107,8 +118,8 @@ class ScheduleManager { payload.day_of_week = options.dayOfWeek || sch.cron.week; payload.day_of_month = options.dayOfMonth || sch.cron.month; - const data = await this.client.requests.make( - endpoints.servers.schedules.get(server, id), payload, 'POST' + const data = await this.client.requests.post( + endpoints.servers.schedules.get(server, id), payload ); return this._patch(data); } @@ -120,10 +131,10 @@ class ScheduleManager { * @returns {Promise} */ async delete(server, id) { - await this.client.requests.make( - endpoints.servers.schedules.get(server, id), null, 'DELETE' + await this.client.requests.delete( + endpoints.servers.schedules.get(server, id) ); - this.cache.get(server).delete(id); + this.cache.get(server)?.delete(id); return true; } } diff --git a/node_modules/@devnote-dev/pterojs/src/client/SubUserManager.js b/node_modules/@devnote-dev/pterojs/src/client/SubUserManager.js index cd29761..1842979 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/SubUserManager.js +++ b/node_modules/@devnote-dev/pterojs/src/client/SubUserManager.js @@ -21,9 +21,11 @@ class SubUserManager { const u = new PteroSubUser(this.client, this.server.identifier, o); s.set(u.uuid, u); } + if (this.client.options.subUsers.cache) s.forEach((v, k) => this.cache.set(k, v)); return s; } + const u = new PteroSubUser(this.client, this.server.identifier, data.attributes); if (this.client.options.subUsers.cache) this.cache.set(u.uuid, u); return u; @@ -35,16 +37,24 @@ class SubUserManager { * * a number * * an object * - * Returns `null` if not found. + * Returns `undefined` if not found. * @param {string|number|object|PteroSubUser} obj The object to resolve from. * @returns {?PteroSubUser} The resolved subuser. */ resolve(obj) { if (obj instanceof PteroSubUser) return obj; - if (typeof obj === 'number') return this.cache.get(obj) || null; - if (typeof obj === 'string') return this.cache.find(s => s.name === obj) || null; + if (typeof obj === 'number') return this.cache.get(obj); + if (typeof obj === 'string') return this.cache.find(s => s.name === obj); if (obj.relationships?.user) return this._patch(obj.relationships.user); - return null; + return undefined; + } + + /** + * Returns a formatted URL to the subuser. + * @returns {string} The formatted URL. + */ + get panelURL() { + return `${this.client.domain}/server/${this.server.identifier}/users`; } /** @@ -54,18 +64,15 @@ class SubUserManager { * @returns {Promise>} The fetched user(s). */ async fetch(id, force = false) { - if (id) { - if (!force) { - const u = this.cache.get(id); - if (u) return Promise.resolve(u); - } - const data = await this.client.requests.make( - endpoints.servers.users.get(this.server.identifier, id) - ); - return this._patch(data); + if (id && !force) { + const u = this.cache.get(id); + if (u) return Promise.resolve(u); } - const data = await this.client.requests.make( - endpoints.servers.users.main(this.server.identifier) + + const data = await this.client.requests.get( + id + ? endpoints.servers.users.get(this.server.identifier, id) + : endpoints.servers.users.main(this.server.identifier) ); return this._patch(data); } @@ -78,11 +85,13 @@ class SubUserManager { */ async add(email, permissions) { if (typeof email !== 'string') throw new Error('Email must be a string.'); + const perms = new Permissions(permissions).toStrings(); if (!perms.length) throw new Error('Need at least 1 permission for the subuser.'); - const data = await this.client.requests.make( + + const data = await this.client.requests.post( endpoints.servers.users.main(this.server.identifier), - { email, permissions: perms }, 'POST' + { email, permissions: perms } ); return this._patch(data); } @@ -95,9 +104,10 @@ class SubUserManager { async setPermissions(uuid, permissions) { const perms = new Permissions(permissions).toStrings(); if (!perms.length) throw new Error('Need at least 1 permission for the subuser.'); - const data = await this.client.requests.make( + + const data = await this.client.requests.post( endpoints.servers.users.get(this.server.identifier, uuid), - { permissions: perms }, 'POST' + { permissions: perms } ); return this._patch(data); } @@ -108,8 +118,8 @@ class SubUserManager { * @returns {Promise} */ async remove(id) { - await this.client.requests.make( - endpoints.servers.users.get(this.server.identifier, id), null, 'DELETE' + await this.client.requests.delete( + endpoints.servers.users.get(this.server.identifier, id) ); this.cache.delete(id); return true; diff --git a/node_modules/@devnote-dev/pterojs/src/client/endpoints.js b/node_modules/@devnote-dev/pterojs/src/client/endpoints.js index 6009748..6fc44d8 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/endpoints.js +++ b/node_modules/@devnote-dev/pterojs/src/client/endpoints.js @@ -7,7 +7,7 @@ module.exports = { apikeys: '/api/client/account/api-keys' }, servers:{ - main: '/api/client/servers', + main: '/api/client', get: s => `/api/client/servers/${s}`, databases:{ main: s => `/api/client/servers/${s}/databases`, diff --git a/node_modules/@devnote-dev/pterojs/src/client/ws/Shard.js b/node_modules/@devnote-dev/pterojs/src/client/ws/Shard.js index bd0d54c..7ed5fad 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/ws/Shard.js +++ b/node_modules/@devnote-dev/pterojs/src/client/ws/Shard.js @@ -1,87 +1,146 @@ +const EventEmitter = require('events'); const WebSocket = require('ws'); const handle = require('./packetHandler'); const endpoints = require('../endpoints'); -class Shard { - constructor(client, id, auth) { +class Shard extends EventEmitter { + constructor(client, id) { + super(); + this.client = client; - this.id = id; - - this.token = auth.token; - + this.token = null; this.socket = null; - this.status = 'CLOSED'; - this.readyAt = 0; - this.ping = -1; - this.lastPing = 0; - - this.connect(auth); } + /** + * Emit `debug` client event with given message + * @param {string} message Message text + */ #debug(message) { - this.client.emit('debug', `[SHARD ${this.id}] ${message}`); + this.emit('debug', `[SHARD ${this.id}] ${message}`); } - connect({ socket }) { - if (!['CLOSED', 'RECONNECTING'].includes(this.status)) return; - if (this.socket) this.socket = null; - this.socket = new WebSocket(socket); - this.status = 'CONNECTING'; + /** + * Initialize connection and resolve after full authentication + * @param {WebSocketAuth?} auth WebSocket URL to connect to + * @returns {Promise} WebSocket connection + */ + connect(auth) { + return new Promise(async (resolve, reject) => { + if (!['CLOSED', 'RECONNECTING'].includes(this.status)) return; + if (this.socket) this.socket = null; + + if (!auth) + ({ data: auth } = await this.client.requests.get(endpoints.servers.ws(this.id))); + + this.socket = new WebSocket(auth.socket); + this.status = 'CONNECTING'; + + this.socket.on('open', () => this._onOpen()); + this.socket.on('message', data => this._onMessage(data.toString())); + this.socket.on('error', error => this._onError(error)); + this.socket.on('close', () => this._onClose()); + + this.token = auth.token; + this.once('authSuccess', () => { + this.emit('serverConnect', this.socket); + resolve(this.socket); + }); + }) } + /** + * Close socket connection and start a new one + * @returns {Promise} WebSocket connection + */ async reconnect() { if (this.status === 'RECONNECTING') return; this.status = 'RECONNECTING'; - const data = await this.client.requests.make(endpoints.servers.ws(this.id)); this.socket.close(4009, 'pterojs::reconnect'); - this.token = data.token; - this.connect(data); + + const { data } = await this.client.requests.get(endpoints.servers.ws(this.id)); + return this.connect(data.socket, data.token); } + /** + * Close socket connection + */ disconnect() { - if (!this.readyAt) return; - this.socket.close(1000, 'pterojs::disconnect'); + return new Promise(async (resolve, reject) => { + if (!this.readyAt) return reject('Socket is not connected'); - this.readyAt = 0; - this.lastPing = 0; - this.ping = -1; - this.token = null; + this.once('serverDisconnect', resolve); + this.socket.close(1000, 'pterojs::disconnect'); + + this.readyAt = 0; + this.lastPing = 0; + this.ping = -1; + }); } + /** + * Get a new token from API and send it to active socket connection + * @returns {Promise} + */ + async refreshToken() { + return new Promise(async (resolve, reject) => { + if (this.status !== 'CONNECTED') return reject('Socket is not connected'); + + // using this transitional property to avoid double token issuing during init + if (!this.token) { + const { data } = await this.client.requests.get(endpoints.servers.ws(this.id)); + this.token = data.token; + } + + this.send('auth', this.token); + this.token = null; + this.lastPing = Date.now(); + + this.once('authSuccess', () => resolve(this.socket)); + }); + } + + /** + * Send a message to socket server + * @param {string} event Name of event + * @param {any|any[]|undefined} args Event data + */ send(event, args) { - if (!this.socket) return; // throw error + if (!this.socket) throw new Error('Socket for this shard is unavailable.'); if (!Array.isArray(args)) args = [args]; - this.socket.send({ event, args }); + this.#debug(`Sending event '${event}'`); + this.socket.send(JSON.stringify({ event, args })); } _onOpen() { - this.#debug('Socket connected'); + this.status = 'CONNECTED'; + this.readyAt = Date.now(); + this.refreshToken(); + + this.#debug('Connection opened'); } - _onMessage({ data }) { + _onMessage(data) { if (!data) return this.#debug('Received a malformed packet'); data = JSON.parse(data); - if (this.status === 'CONNECTING') { - this.status = 'CONNECTED'; - this.lastPing = Date.now(); - return this.send('auth', this.token); - } - - this.client.emit('rawPayload', data); + this.emit('rawPayload', data); switch (data.event) { case 'auth success': this.ping = Date.now() - this.lastPing; + this.emit('authSuccess'); + break; case 'token expiring': - // irrelevant + this.refreshToken(); + this.#debug('Auth token refreshed'); return; case 'token expired': @@ -89,18 +148,25 @@ class Shard { break; } - handle(this.client, data, this.id); + handle(this, data, this.id); } - _onError({ error }) { + _onError(error) { if (!error) return; this.#debug(`Error received: ${error}`); } _onClose() { this.status = 'CLOSED'; + this.emit('serverDisconnect'); this.#debug('Connection closed'); } } +/** + * @typedef {object} WebSocketAuth + * @property {string} token + * @property {string} socket + */ + module.exports = Shard; diff --git a/node_modules/@devnote-dev/pterojs/src/client/ws/WebSocketManager.js b/node_modules/@devnote-dev/pterojs/src/client/ws/WebSocketManager.js index c286699..11bfbd3 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/ws/WebSocketManager.js +++ b/node_modules/@devnote-dev/pterojs/src/client/ws/WebSocketManager.js @@ -1,57 +1,24 @@ const Shard = require('./Shard'); -const endpoints = require('../endpoints'); - -// const EVENTS = { -// 'auth success': 'serverConnect', -// 'console output': 'serverOutput', -// 'token expired': 'serverDisconnect', -// 'status': 'statusUpdate', -// 'stats': 'statsUpdate' -// } class WebSocketManager { constructor(client) { this.client = client; - this.servers = []; - /** * A map of active server shards. * @type {Map} */ this.shards = new Map(); - this.totalShards = 0; - this.readyAt = 0; } - async launch() { - if (!this.servers.length) { - this.client.emit('debug', '[WS] No shards to launch'); - return; - } - this.client.emit('debug', `[WS] Attempting to launch ${this.servers.length} shard(s)`); - for (const id of this.servers) { - const data = await this.client.requests.make(endpoints.servers.ws(id)); - try { - const shard = new Shard(this.client, id, data); - this.shards.set(id, shard); - this.totalShards++; - } catch { - this.client.emit('debug', `[WS] Shard ${id} failed to launch`); - } - } - this.readyAt = Date.now(); - this.client.emit('ready'); - } - destroy() { if (!this.readyAt) return; for (const shard of this.shards.values()) shard.disconnect(); this.shards.clear(); this.readyAt = 0; - this.client.emit('debug', `[WS] Destroyed ${this.totalShards} shards`); + this.client.emit('debug', `[WS] Destroyed ${this.totalShards} shard(s)`); this.totalShards = 0; } @@ -61,6 +28,37 @@ class WebSocketManager { for (const shard of this.shards.values()) sum += shard.ping; return sum / this.totalShards; } + + /** + * Adds a server to be connected to websockets. + * @param {string} id The identifier of the server. + * @returns {Shard} Created (or reused) shard. + */ + createShard(id) { + if (this.shards.has(id)) + return this.shards.get(id); + + const shard = new Shard(this.client, id); + this.shards.set(id, shard); + this.totalShards++; + + return shard; + } + + /** + * Removes a server from websocket connections. + * @param {string} id The identifier of the server. + * @returns {boolean} Whether shard was removed. + */ + removeShard(id) { + if (!this.shards.has(id)) + return false; + + this.shards.delete(id); + this.totalShards--; + + return true; + } } module.exports = WebSocketManager; diff --git a/node_modules/@devnote-dev/pterojs/src/client/ws/packetHandler.js b/node_modules/@devnote-dev/pterojs/src/client/ws/packetHandler.js index cf7e8d5..7bf081b 100644 --- a/node_modules/@devnote-dev/pterojs/src/client/ws/packetHandler.js +++ b/node_modules/@devnote-dev/pterojs/src/client/ws/packetHandler.js @@ -1,51 +1,51 @@ -function handle(client, { event, args }, id) { - function getServer(id) { - return client.servers.cache.get(id); - } +const caseConv = require('../../util/caseConv'); + +function handle(shard, { event, args }) { + if (!Array.isArray(args)) args = [args]; switch (event) { case 'auth success': - return client.emit('serverConnect', getServer(id)); + return shard.emit('authSuccess'); case 'status': - return client.emit('statusUpdate', getServer(id), ...args); + return shard.emit('statusUpdate', ...args); case 'console output': - return client.emit('serverOutput', id, ...args); + return shard.emit('serverOutput', ...args); case 'daemon message': - return client.emit('daemonMessage', getServer(id), ...args); + return shard.emit('daemonMessage', ...args); case 'install started': - return client.emit('installStart', id); + return shard.emit('installStart'); case 'install output': - return client.emit('installOutput', id, ...args); + return shard.emit('installOutput', ...args); case 'install completed': - return client.emit('installComplete', id); + return shard.emit('installComplete'); case 'stats': - return client.emit('statsUpdate', getServer(id), ...args); + const stats = JSON.parse(...args); + stats.network = caseConv.camelCase(stats.network); + return shard.emit('statsUpdate', caseConv.camelCase(stats)); case 'transferLogs': case 'transferStatus': - return client.emit('transferUpdate', id, ...args); + return shard.emit('transferUpdate', ...args); case 'backup completed': - let backup = {}; - if (args.length) backup = getServer(id).backups._patch(args[0]); - return client.emit('backupComplete', getServer(id), backup); + return shard.emit('backupComplete', args ?? {}); case 'token expired': - return client.emit('serverDisconnect', id); + return shard.emit('serverDisconnect'); case 'daemon error': case 'jwt error': - return client.emit('error', id, ...args); + return shard.emit('error', ...args); default: - return client.emit('debug', `[SHARD ${id}] Received unknown event: '${event}'`); + return shard.emit('debug', `[SHARD ${id}] Received unknown event: '${event}'`); } } diff --git a/node_modules/@devnote-dev/pterojs/src/extensions/NodeStatus/index.js b/node_modules/@devnote-dev/pterojs/src/extensions/NodeStatus/index.js index 6d5fc77..7a6a2ab 100644 --- a/node_modules/@devnote-dev/pterojs/src/extensions/NodeStatus/index.js +++ b/node_modules/@devnote-dev/pterojs/src/extensions/NodeStatus/index.js @@ -1,12 +1,12 @@ const { EventEmitter } = require('events'); const fetch = require('node-fetch'); -const caseConv = require('../../structures/caseConv'); +const caseConv = require('../../util/caseConv'); class NodeStatus extends EventEmitter { headers = { 'Content-Type': 'application/json', 'Accept': 'application/json', - 'User-Agent': 'NodeStatus PteroJS v1.0.2' + 'User-Agent': 'NodeStatus PteroJS v1.0.3' } #interval = null; #connected = new Set(); @@ -18,15 +18,23 @@ class NodeStatus extends EventEmitter { super(); Object.assign(this, options); + if (!/https?\:\/\/(?:localhost\:\d{4}|[\w\.\-]{3,256})/gi.test(this.domain)) + throw new SyntaxError( + "Domain URL must start with 'http://' or 'https://' and "+ + 'must be bound to a port if using localhost.' + ); + this.headers['Authorization'] = 'Bearer '+ options.auth; this.nextInterval ||= 5; this.retryLimit ||= 0; - /** @type {?Function} */ + /** @type {null | (id: number) => void} */ this.onConnect = null; - /** @type {?Function} */ + + /** @type {null | (d: object) => void} */ this.onInterval = null; - /** @type {?Function} */ + + /** @type {null | (id: number) => void} */ this.onDisconnect = null; this.ping = -1; @@ -50,6 +58,7 @@ class NodeStatus extends EventEmitter { this.#debug('Starting connection to API'); await this.#ping(); await this.#handleNext(); + this.#interval = setInterval(() => this.#handleNext(), this.callInterval).unref(); this.readyAt = Date.now(); process.on('SIGINT', _ => this.close()); @@ -61,9 +70,15 @@ class NodeStatus extends EventEmitter { const res = await fetch(`${this.domain}/api/application`, { method: 'GET', headers: this.headers }); + if (res.status === 401) - return this.close('[NS:401] Invalid API credentials. Contact your panel administrator.', true); + return this.close( + '[NS:401] Invalid API credentials. Contact your panel administrator.', + true + ); + if (res.status === 403) return this.close('[NS:403] Missing access.', true); + this.ping = Date.now() - start; const data = await res.json().catch(()=>{}); if (data?.errors?.length) return; @@ -88,7 +103,11 @@ class NodeStatus extends EventEmitter { if (!res.ok) { if (res.status === 401) - return this.close('[NS:401] Invalid API credentials. Contact your panel administrator.', true); + return this.close( + '[NS:401] Invalid API credentials. Contact your panel administrator.', + true + ); + if (res.status === 403) return this.close('[NS:403] Missing access.', true); if (res.status === 404) { if (this.#connected.has(id)) { @@ -98,7 +117,10 @@ class NodeStatus extends EventEmitter { } return; } - if (this.current > this.retryLimit) return this.close('[NS] Maximum retry limit exceeded.'); + + if (this.current > this.retryLimit) + return this.close('[NS] Maximum retry limit exceeded.'); + this.current++; this.#debug('Attempting retry fetch'); this.#request(id); @@ -112,14 +134,17 @@ class NodeStatus extends EventEmitter { this.emit('connect', id); if (this.onConnect !== null) this.onConnect(id); } + this.emit('interval', attributes); if (this.onInterval !== null) this.onInterval(attributes); } close(message = 'None', error = false) { if (!this.readyAt) return; + this.#debug('Closing connection'); if (this.#interval) clearInterval(this.#interval); + this.removeAllListeners(); this.#connected.clear(); if (error && message) throw new Error(message); diff --git a/node_modules/@devnote-dev/pterojs/src/index.d.ts b/node_modules/@devnote-dev/pterojs/src/index.d.ts index a16f77d..7cbd1f5 100644 --- a/node_modules/@devnote-dev/pterojs/src/index.d.ts +++ b/node_modules/@devnote-dev/pterojs/src/index.d.ts @@ -1,266 +1,380 @@ // Typedefs for PteroJS classes, structures and extensions -import EventEmitter from 'events'; +import { EventEmitter } from 'events'; import WebSocket from 'ws'; -export const version: string; +export interface FetchOptions { + force?: boolean; +} + +export type Include = { include?: string[] } & B; export interface OptionSpec { - fetch: boolean; - cache: boolean; - max: number; + fetch: boolean; + cache: boolean; + max: boolean; } // Application API -export interface ApplicationOptions { - users: OptionSpec; - nodes: OptionSpec; - nests: OptionSpec; - servers: OptionSpec; - locations: OptionSpec; -} - -export class PteroApp { - constructor(domain: string, auth: string, options?: Partial); - - public domain: string; - public auth: string; - public options: ApplicationOptions; - public readyAt: number; - public ping: number; - public users: UserManager; - public nodes: NodeManager; - public nests: NestManager; - public servers: ApplicationServerManager; - public locations: NodeLocationManager; - public requests: ApplicationRequestManager; - - public connect(): Promise; - public disconnect(): void; -} - -export class UserManager { - constructor(client: PteroApp); - - public readonly client: PteroApp; - public cache: Dict; - - public _patch(data: object): PteroUser | Dict; - public resolve(obj: string|number|object|PteroUser): PteroUser | null; - public fetch(id?: number, options?:{ force?: boolean; withServers?: boolean }): Promise>; - public fetchExternal(id: number, options?:{ force?: boolean; withServers?: boolean }): Promise; - public query(entity: string, filter?: string, sort?: string): Promise>; - public create(email: string, username: string, firstname: string, lastname: string): Promise; - public update( - user: number|PteroUser, - options:{ - email?: string; - username?: string; - firstname?: string; - lastname?: string; - password: string; - } - ): Promise; - public delete(user: number|PteroUser): Promise; -} - -export class NodeManager { - constructor(client: PteroApp); - - public readonly client: PteroApp; - public cache: Dict; - - public _patch(data: object): Node | Dict; - public fetch(id?: number, options?:{ force?: boolean; include?: string[] }): Promise>; - public create(options:{ - name: string; - location: number; - fqdn: string; - scheme: string; - memory: number; - disk: number; - sftp:{ - port: number; - listener: string; - }; - upload_size?: number; - memory_overallocate?: number; - disk_overallocate?: number; - }): Promise; - public update(options:{ - name?: string; - location?: number; - fpdn?: string; - scheme?: string; - memory?: number; - disk?: number; - stfp?:{ - port: number; - listener: string; - }; - upload_size?: number; - memory_overallocate?: number; - disk_overallocate?: number; - }): Promise; - public delete(node: number|Node): Promise; -} - -export interface Nest { - id: number; - uuid: string; - author: string; - name: string; - description: string; - createdAt: Date; - updatedAt: Date | null; -} - -export class NestManager { - constructor(client: PteroApp); - - public readonly client: PteroApp; - public cache: Set; - public eggs: NestEggsManager; - - public _patch(data: object): Set; - public fetch(id?: number): Promise>; -} - -export class NestEggsManager { - constructor(client: PteroApp); - - public readonly client: PteroApp; - public cache: Dict; - - public fetch( - nest: number, - id?: number, - options?:{ - force?: boolean; - include?: string[]; - } - ): Promise>; - public for(nest: number): object[]; +export interface ApplicationServerCreateOptions { + name: string; + egg: string; + image: string; + startup: string; + env: { [key: string]: any }; + allocation: number; + limits?: { [key: string]: any }; + featureLimits?: { [key: string]: any }; } export class ApplicationServerManager { + static get FILTERS(): Readonly; + static get INCLUDES(): Readonly; + static get SORTS(): Readonly; + constructor(client: PteroApp); + client: PteroApp; - public readonly client: PteroApp; - public cache: Dict; - public static get defaultLimits(): object; - public static get defaultFeatureLimits(): object; + get defaultLimits(): { [key: string]: number }; + get defaultFeatureLimits(): { [key: string]: number }; - public _patch(data: object): ApplicationServer | Dict; - public resolve(obj: string|number|object|ApplicationServer): ApplicationServer | null; - public fetch(id?: number, options?:{ force?: boolean; include?: string[] }): Promise; - public query(entity: string, filter?: string, sort?: 'id'|'-id'|'uuid'|'-uuid'): Promise>; - public create( - user: number|PteroUser, - options:{ - name: string; - egg: string; - image: string; - startup: string; - env: object; - allocation: number; - limits?: object; - featureLimits?: object; - } - ): Promise; - public delete(server: number|ApplicationServer, force?: boolean): Promise; + _patch(data: any): ApplicationServer | Dict; + resolve(obj: string | number | object | ApplicationServer): ApplicationServer | undefined; + panelURLFor(server: string | ApplicationServer): string; + adminURLFor(server: number | ApplicationServer): string; + fetch(id?: number, options?: Include): Promise>; + query(entity: string, filter?: string, sort?: string): Promise>; + create(user: number | PteroUser, options: ApplicationServerCreateOptions): Promise; + delete(server: number | ApplicationServer, force?: boolean): Promise; +} + +export class NestEggsManager { + static get INCLUDES(): Readonly; + + constructor(client: PteroApp); + client: PteroApp; + cache: Dict; + + adminURLFor(id: number): string; + fetch(nest: number, id?: number, options?: Include): Promise>; + for(nest: number): object[]; +} + +export interface Nest { + id: number; + uuid: string; + author: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date | null; +} + +export class NestManager { + static get INCLUDES(): Readonly; + + constructor(client: PteroApp); + client: PteroApp; + cache: Set; + eggs: NestEggsManager; + + _patch(data: any): Set; + adminURLFor(id: number): string; + fetch(id: number, include: Include<{}>): Promise>; +} + +export interface NodeAllocation { + id: number; + ip: string; + alias: string | null; + port: number; + notes: string | null; + assigned: boolean; +} + +export class NodeAllocationManager { + static get INCLUDES(): Readonly; + + constructor(client: PteroApp); + client: PteroApp; + cache: Dict; + + _patch(node: number, data: any): Dict; + adminURLFor(id: number): string; + fetch(node: number, options: Include): Promise>; + fetchAvailable(node: number, single?: boolean): Promise | NodeAllocation | void>; + create(node: number, ip: string, ports: string[]): Promise; + delete(node: number, id: number): Promise; } export interface NodeLocation { - id: number; - long: string; - short: string; - createdAt: Date; - updatedAt: Date | null; + id: number; + long: string; + short: string; + createdAt: Date; + updatedAt: Date | null; } export class NodeLocationManager { + static get FILTERS(): Readonly; + static get INCLUDES(): Readonly; + constructor(client: PteroApp); + client: PteroApp; + cache: Dict; - public readonly client: PteroApp; - public cache: Dict; - - public _patch(data: object): NodeLocation | Dict; - public resolve(obj: number|object): NodeLocation | null; - public fetch(id?: number, force?: boolean): Promise>; - public create(short: string, long: string): Promise; - public update(id: number, options:{ short: string; long: string }): Promise; - public delete(id: number): Promise; + _patch(data: any): NodeLocation | Dict; + resolve(obj: string | number | object): NodeLocation | undefined; + adminURLFor(id: number): string; + fetch(id?: number, options?: Include): Promise>; + query(entity: string, filter?: string, sort?: string): Promise>; + create(short: string, long: string): Promise; + update(id: number, options:{ short?: string; long?: string }): Promise; + delete(id: number): Promise; } -export class ApplicationRequestManager { +export interface NodeCreateOptions { + name: string; + location: number; + fqdn: string; + scheme: string; + memory: number; + disk: number; + sftp:{ + port: number; + listener: number; + }; + upload_size?: number; + memory_overallocate?: number; + disk_overallocate?: number; +} + +export class NodeManager { + static get FILTERS(): Readonly; + static get INCLUDES(): Readonly; + static get SORTS(): Readonly; + constructor(client: PteroApp); + client: PteroApp; + cache: Dict; - public readonly client: PteroApp; - public suspended: boolean; - public headers: { [key: string]: string }; - - public make(path: string, params?: object, method?: string): Promise; - public ping(): Promise; + _patch(data: any): Node | Dict; + resolve(obj: string | number | object | Node): Node | undefined; + adminURLFor(node: number | Node): string; + fetch(id: number, options?: Include): Promise>; + query(entity: string, filter?: string, sort?: string): Promise>; + create(options: NodeCreateOptions): Promise; + update(node: number | Node, options: Partial): Promise; + delete(node: number | Node): Promise; } -// Client API - -export interface ClientOptions { - ws: boolean; - fetchClient: boolean; - servers: OptionSpec; - subUsers: OptionSpec; - disableEvents: string[]; +export interface ApplicationOptions { + users?: OptionSpec; + nodes?: OptionSpec; + nests?: OptionSpec; + servers?: OptionSpec; + locations?: OptionSpec; } -export interface ClientEvents { - debug: [message: string]; - error: [id: string, error: any]; - ready: []; +export class PteroApp { + constructor(domain: string, auth: string, options?: ApplicationOptions); + domain: string; + auth: string; + options: ApplicationOptions; + users: UserManager; + nodes: NodeManager; + nests: NestManager; + servers: ApplicationServerManager; + locations: NodeLocationManager; + allocations: NodeAllocationManager; + requests: RequestManager; - serverConnect: [server: ClientServer]; - serverOutput: [id: string, output: any]; - serverDisconnect: [id: string]; + get ping(): number; - statusUpdate: [server: ClientServer, status: string]; - statsUpdate: [server: ClientServer, stats: any]; - transferUpdate: [id: string, data: any]; - - installStart: [id: string]; - installOutput: [id: string, output: any]; - installComplete: [id: string]; - - backupComplete: [server: ClientServer, backup: Partial]; - - daemonMessage: [id: string, message: any]; + connect(): Promise; } -export class PteroClient extends EventEmitter { - constructor(domain: string, auth: string, options?: Partial); +export interface UserCreateOptions { + email: string; + username: string; + firstname: string; + lastname: string; + password?: string; +} - public domain: string; - public auth: string; - public options: ClientOptions; - public readyAt: number; - public ping: number; - public user: ClientUser | null; - public servers: ClientServerManager; - public schedules: ScheduleManager; - public requests: ClientRequestManager; - public ws: WebSocketManager; +export class UserManager { + static get FILTERS(): Readonly; + static get SORTS(): Readonly; - public emit(event: K, ...args: ClientEvents[K]): boolean; - public on(event: K, listener: (...args: ClientEvents[K]) => any): this; - public once(event: K, listener: (...args: ClientEvents[K]) => any): this; - public off(event: K, listener: (...args: ClientEvents[K]) => any): this; + constructor(client: PteroApp); + client: PteroApp; + cache: Dict; - public connect(): Promise; - public fetchClient(): Promise; - public addSocketServer(ids: string[]): void; - public removeSocketServer(id: string): void; - public disconnect(): void; + _patch(data: any): PteroUser | Dict; + resolve(obj: string | number | object | PteroUser): PteroUser | undefined; + adminURLFor(user: number | PteroUser): string; + fetch(id?: number, options?: { withServers?: boolean } & FetchOptions): Promise>; + fetchExternal(id: number, options?: { withServers?: boolean } & FetchOptions): Promise; + query(entity: string, filter?: string, sort?: string): Promise>; + create(email: string, username: string, firstname: string, lastname: string): Promise; + update(user: number | PteroUser, options: Partial): Promise; + delete(user: number | PteroUser): Promise; +} + +// Client API - Websockets + +export interface WebSocketAuth { + token: string; + socket: string; +} + +export type WebSocketStatus = + | 'CLOSED' + | 'CONNECTING' + | 'RECONNECTING' + | 'CONNECTED'; + +export interface ShardCommands { + 'auth': [token: string] + 'send stats': [] + 'send logs': [] + 'set state': [state: PowerState] + 'send command': [command: string] +} + +export interface ServerStats { + cpuAbsolute: number; + diskBytes: number; + memoryBytes: number; + memoryLimitBytes: number; + network: { + rxBytes: number; + txBytes: number; + }; + state: string; + uptime: number; +} + +export interface ShardEvents { + debug: [message: string]; + error: [id: string, error: any]; + + tokenRefresh: []; + + authSuccess: []; + serverConnect: [socket: WebSocket]; + serverOutput: [output: string]; + serverDisconnect: []; + + statusUpdate: [status: string]; + statsUpdate: [stats: ServerStats]; + transferUpdate: [data: any]; + + installStart: []; + installOutput: [output: string]; + installComplete: []; + + backupComplete: [backup: Partial]; + + daemonMessage: [message: any]; +} + +export class Shard extends EventEmitter { + constructor(client: PteroClient, id: string, auth: WebSocketAuth); + client: PteroClient; + id: string; + token: string | null; + socket: WebSocket | null; + status: WebSocketStatus; + readyAt: number; + ping: number; + lastPing: number; + + #debug(message: string): void; + connect(auth?: WebSocketAuth): Promise; + reconnect(): Promise; + refreshToken(): Promise; + disconnect(): Promise; + send(event: K, args: ShardCommands[K]): void; + _onOpen(): void; + _onMessage({ data }:{ data: string }): void; + _onError({ error }: any): void; + _onClose(): void; + + emit(event: E, ...args: ShardEvents[E]): boolean; + on(event: E, listener: (...args: ShardEvents[E]) => any): this; + on(event: E, listener: (...args: ShardEvents[E]) => T): this; + once(event: E, listener: (...args: ShardEvents[E]) => any): this; + once(events: E, listener: (...args: ShardEvents[E]) => T): this; + off(event: E, listener: (...args: ShardEvents[E]) => any): this; + off(event: E, listener: (...args: ShardEvents[E]) => T): this; +} + +export class WebSocketManager { + constructor(client: PteroClient); + client: PteroClient; + servers: string[]; + shards: Map; + totalShards: number; + readyAt: number; + ping: number; + + destroy(): void; + createShard(id: string): Shard; + removeShard(id: string): boolean; +} + +// Client API - Main + +export interface Backup { + uuid: string; + name: string; + ignoredFiles: string[]; + hash: string | null; + bytes: number; + createdAt: Date; + completedAt: Date | null; +} + +export class BackupManager { + constructor(client: PteroClient, server: ClientServer); + client: PteroClient; + server: ClientServer; + cache: Dict; + + _patch(data: any): Backup | Dict; + fetch(id?: string, force?: boolean): Promise>; + create(): Promise; + download(id: string): Promise; + delete(id: string): Promise; +} + +export interface ClientDatabase { + id: string; + host:{ + address: string; + port: number; + }; + name: string; + username: string; + password: string | null; + connections: string; + maxConnections: number; +} + +export class ClientDatabaseManager { + constructor(client: PteroClient, server: ClientServer); + client: PteroClient; + server: ClientServer; + cache: Dict; + + _patch(data: any): Dict; + get panelURL(): string; + fetch(withPass?: boolean): Promise>; + create(database: string, remote: string): Promise; + rotate(id: string): Promise; + delete(id: string): Promise; } export interface PageData { @@ -273,451 +387,458 @@ export interface PageData { } export class ClientServerManager { + static get INCLUDES(): Readonly; + constructor(client: PteroClient); + client: PteroClient; + cache: Dict; + pageData: PageData; - public readonly client: PteroClient; - public cache: Dict; - public pageData: PageData; + _patch(data: any): ClientServer | Dict; + _resolveMeta(data: any): void; + panelURLFor(server: string | ClientServer): string; + fetch(id: string, options?: Include): Promise>; +} - public _patch(data: object): ClientServer | Dict; - public _resolveMeta(data: object): void; - public fetch(id?: string, options?:{ force?: boolean; include?: string[] }): Promise>; +export interface PteroFile { + name: string; + mode: string; + modeBits: bigint; + size: number; + isFile: boolean; + isSymlink: boolean; + isEditable: boolean | undefined; + mimetype: string; + createdAt: Date; + modifiedAt: Date | null; +} + +export class FileManager { + constructor(client: PteroClient, server: ClientServer); + client: PteroClient; + server: ClientServer; + cache: Dict>; + + _patch(data: any): Dict; + get panelURL(): string; + fetch(dir: string): Promise>; + getContents(filePath: string): Promise; + download(filePath: string): Promise; + rename(filePath: string, name: string): Promise; + copy(filePath: string): Promise; + write(filePath: string, content: string | Buffer): Promise; + compress(dir: string, files: string[]): Promise; + decompress(dir: string, file: string): Promise; + delete(dir: string, files: string[]): Promise; + createFolder(dir: string, name: string): Promise; + getUploadURL(): Promise; +} + +export interface NetworkAllocation { + id: number; + ip: string; + ipAlias: string | null; + port: number; + notes: string | null; + isDefault: boolean; +} + +export class NetworkAllocationManager { + constructor(client: PteroClient, server: ClientServer); + client: PteroClient; + server: ClientServer; + cache: Dict; + + _patch(data: any): Dict; + fetch(): Promise>; + assign(): Promise; + setNote(id: number, notes: string): Promise; + setPrimary(id: number): Promise; + unassign(id: number): Promise; +} + +export interface ClientOptions { + ws?: boolean; + fetchClient?: boolean; + servers?: OptionSpec; + subUsers?: OptionSpec; + disableEvents?: string[]; +} + +export interface ClientEvents { + debug: [message: string]; + error: [id: string, error: any]; + ready: []; +} + +export class PteroClient extends EventEmitter { + constructor(domain: string, auth: string, options?: ClientOptions); + domain: string; + auth: string; + options: ClientOptions; + user: ClientUser | null; + servers: ClientServerManager; + schedules: ScheduleManager; + requests: RequestManager; + ws: WebSocketManager; + ping: number; + + connect(): Promise; + fetchClient(): Promise; + addSocketServer(ids: T): T extends string[] ? Shard[] : Shard; + removeSocketServer(id: string): boolean; + disconnect(): void; + + emit(event: E, ...args: ClientEvents[E]): boolean; + on(event: E, listener: (...args: ClientEvents[E]) => any): this; + on(event: E, listener: (...args: ClientEvents[E]) => T): this; + once(event: E, listener: (...args: ClientEvents[E]) => any): this; + once(events: E, listener: (...args: ClientEvents[E]) => T): this; + off(event: E, listener: (...args: ClientEvents[E]) => any): this; + off(event: E, listener: (...args: ClientEvents[E]) => T): this; +} + +export interface ScheduleCreateOptions { + name: string; + active: boolean; + minute: string; + hour: string; + dayOfWeek?: string; + dayOfMonth?: string; } export class ScheduleManager { constructor(client: PteroClient); + client: PteroClient; + cache: Dict; - public readonly client: PteroClient; - public cache: Dict>; - - public _patch(id: number, data: object): Schedule|Dict; - public fetch(server: string, id?: number, force?: boolean): Promise>; - public create( - server: string, - options:{ - name: string; - active: boolean; - minute: string; - hour: string; - dayOfWeek?: string; - dayOfMonth?: string; - } - ): Promise; - public update( - server: string, - id: number, - options:{ - name?: string; - active?: boolean; - minute?: string; - hour?: string; - dayOfWeek?: string; - dayOfMonth?: string; - } - ): Promise; - public delete(server: string, id: number): Promise; -} - -export class ClientRequestManager { - constructor(client: PteroClient); - - public client: PteroClient; - public suspended: boolean; - public headers: { [key: string]: string }; - - public make(path: string, params?: object, method?: string): Promise; - public ping(): Promise; -} - -export interface Backup { - uuid: string; - name: string; - ignoredFiles: string[]; - hash: string | null; - bytes: number; - createdAt: Date; - completedAt: Date | null; -} - -export class BackupManager { - constructor(client: PteroApp|PteroClient, server?: ApplicationServer); - - public readonly client: PteroApp | PteroClient; - public cache: Dict; - - public _patch(data: object): Backup | Dict; - public fetch(id?: string, force?: boolean): Promise>; - public create(): Promise; - public download(id: string): Promise; - public delete(id: string): Promise; + _patch(id: number, data: any): Schedule | Dict; + panelURLFor(id: string, schedule: string | Schedule): string; + fetch(server: string, id?: string, force?: boolean): Promise>; + create(server: string, options: ScheduleCreateOptions): Promise; + update(server: string, id: string, options: Partial): Promise; + delete(server: string, id: string): Promise; } export class SubUserManager { constructor(client: PteroClient, server: ClientServer); + client: PteroClient; + server: ClientServer; + cache: Dict; - public readonly client: PteroClient; - public cache: Dict; - - public _patch(data: object): PteroSubUser | Dict; - public resolve(obj: string|number|object|PteroSubUser): PteroSubUser | null; - public fetch(id?: string, force?: boolean): Promise>; - public add(email: string, permissions: PermissionResolvable): Promise; - public setPermissions(uuid: string, permissions: PermissionResolvable): Promise; - public remove(id: string): Promise; + _patch(data: any): PteroSubUser | Dict; + resolve(obj: string | number | object | PteroSubUser): PteroSubUser | undefined; + get panelURL(): string; + fetch(id?: string, force?: boolean): Promise>; + add(email: string, permissions: PermissionResolvable): Promise; + setPermissions(uuid: string, permissions: PermissionResolvable): Promise; + remove(id: string): Promise; } -// Websocket +// Extensions -export class Shard { - constructor(client: PteroClient, id: string, auth: { [key: string]: string }); - - public client: PteroClient; - public id: string; - private token: string | null; - private socket: WebSocket | null; - public status: string; - public readyAt: number; - public ping: number; - public lastPing: number; - - private debug(message: string): void; - public connect({ socket }:{ socket: string }): void; - public reconnect(): Promise; - public disconnect(): void; - public send(event: string, data: any[]): void; - private _onOpen(): void; - private _onMessage({ data }:{ data: any }): void; - private _onError({ error }:{ error: any }): void; - private _onClose(): void; +export interface StatusOptions { + domain: string; + auth: string; + nodes: number[]; + callInterval: number; + nextInterval?: number; + retryLimit?: number; } -export class WebSocketManager { - constructor(client: PteroClient); - - public client: PteroClient; - public servers: string[]; - public shards: Map; - public totalShards: number; - public readyAt: number; - public ping: number; - - launch(): Promise; - destroy(): void; +export interface StatusEvents { + debug: [message: string]; + connect: [id: number]; + interval: [node: object]; + disconnect: [id: number]; } -// Global Managers +export class NodeStatus extends EventEmitter implements StatusOptions { + constructor(options: StatusOptions); + options: StatusOptions; + headers: { [key: string]: string }; + #interval: NodeJS.Timer | null; + #connected: Set; + domain: string; + auth: string; + nodes: number[]; + callInterval: number; + nextInterval: number; + retryLimit: number; + ping: number; + current: number; + readyAt: number; -export interface Allocation { - id: number; - ip: string; - ipAlias: string | null; - port: number; - notes: string | null; - isDefault: boolean; + onConnect: (id: number) => void; + onInterval: (d: object) => void; + onDisconnect: (id: number) => void; + + #debug(message: string): void; + connect(): Promise; + #ping(): Promise; + #handleNext(): Promise; + #request(id: number): Promise; + close(message?: string, error?: boolean): void; + + emit(event: E, ...args: StatusEvents[E]): boolean; + on(event: E, listener: (...args: StatusEvents[E]) => any): this; + on(event: E, listener: (...args: StatusEvents[E]) => T): this; + once(event: E, listener: (...args: StatusEvents[E]) => any): this; + once(events: E, listener: (...args: StatusEvents[E]) => T): this; + off(event: E, listener: (...args: StatusEvents[E]) => any): this; + off(event: E, listener: (...args: StatusEvents[E]) => T): this; } -export class AllocationManager { - constructor(client: PteroApp|PteroClient, server: ApplicationServer|ClientServer, data: object); +// HTTP - public readonly client: PteroApp | PteroClient; - public readonly server: ApplicationServer | ClientServer; - public isClient: boolean; - public cache: Dict; +export class RequestManager extends EventEmitter { + constructor(type: string, domain: string, auth: string); + type: string; + domain: string; + auth: string; + ping: number; - public _patch(data: object): Allocation | Set; - public fetch(): Promise>; - public assign(): Promise; - public setNote(id: number, note: string): Promise; - public setPrimary(id: number): Promise; - public unassign(id: number): Promise; + getHeaders(): { [key: string]: string }; + #debug(message: string): void; + _make(path: string, params: object, method?: string): Promise; + get(path: string): Promise; + post(path: string, params: object): Promise; + patch(path: string, params: object): Promise; + put(path: string, params: object): Promise; + delete(path: string, params?: object): Promise; } -export interface Database { - id: string; - host:{ - address: string; - port: number; +// Structures + +export interface UpdateDetailsOptions { + name?: string; + owner?: number | PteroUser; + externalId?: string; + description?: string; +} + +export interface UpdateBuildOptions { + allocation?: number; + swap?: number; + memory?: number; + disk?: number; + cpu?: number; + threads?: number | null; + io?: number; + featureLimits?:{ + allocations?: number; + backups?: number; + databases?: number; }; - name: string; - password: string | null; - connections: string; - maxConnections: number; } -export class DatabaseManager { - constructor(client: PteroApp|PteroClient, server: ApplicationServer|ClientServer, data: object); - - public readonly client: PteroApp | PteroClient; - public readonly server: ApplicationServer | ClientServer; - public isClient: boolean; - public cache: Dict; - - public _patch(data: object): Database | Dict; - public fetch(withPass?: boolean): Promise | void>; - public create(database: string, remote: string): Promise; - public rotate(id: string): Promise; - public delete(id: string): Promise; -} - -export interface PteroFile { - name: string; - mode: string; - modeBits: bigint; - size: number; - isFile: boolean; - isSymlink: boolean; - isEditable?: boolean; - mimetype: string; - createdAt: Date; - modifiedAt: Date|null; -} - -export class FileManager { - constructor(client: PteroApp|PteroClient, server: ApplicationServer|ClientServer, data: object); - - public readonly client: PteroApp | PteroClient; - public readonly server: ApplicationServer | ClientServer; - public isClient: boolean; - public cache: Map>; - - public _patch(data?: object): PteroFile | Map; - public fetch(dir?: string): Promise| void>; - public getContents(filePath: string): Promise; - public download(filePath: string): Promise; - public rename(filePath: string, name: string): Promise; - public copy(filePath: string): Promise; - public write(filePath: string, content: string|Buffer): Promise; - public compress(dir: string, files: string[]): Promise | void>; - public decompress(dir: string, file: string): Promise; - public delete(dir: string, files: string[]): Promise; - public createFolder(dir: string, name: string): Promise; - public getUploadURL(): Promise; -} - -// Package Structures - export class ApplicationServer { constructor(client: PteroApp, data: object); + client: PteroApp; + id: number; + uuid: string; + identifier: string; + externalId: string | null; + name: string; + description: string | null; + suspended: boolean; + limits: object; + featureLimits: object; + ownerId: number; + owner: PteroUser | null; + nodeId: number; + node: Node | null; + allocation: number; + nest: number; + egg: number; + container: null; + createdAt: Date; + createdTimestamp: number; + updatedAt: Date | null; + updatedTimestamp: number | null; - public readonly client: PteroApp; - public readonly id: number; - public externalId: string | null; - public uuid: string; - public identifier: string; - public name: string; - public description: string | null; - public suspended: boolean; - public limits: object; - public featureLimits: object; - public user: number; - public owner: PteroUser | null; - public nodeId: number; - public allocation: number; - public nest: number; - public egg: number; - public readonly createdAt: Date; - public readonly createdTimestamp: number; - public updatedAt: Date | null; - public updatedTimestamp: number | null; - - public _patch(data: object): ApplicationServer | Dict; - public updateDetails(options: object): Promise; - public suspend(): Promise; - public unsuspend(): Promise; - public reinstall(): Promise; - public toJSON(): object; + _patch(data: any): void; + get panelURL(): string; + get adminURL(): string; + fetchOwner(): Promise; + updateDetails(options: UpdateDetailsOptions): Promise; + updateBuild(options: UpdateBuildOptions): Promise; + updateStartup(options: object): void; + suspend(): Promise; + unsuspend(): Promise; + reinstall(): Promise; + delete(force?: boolean): Promise; + toJSON(): object; } -export class ClientServer { - public constructor(client: PteroClient, data: object); +export type PowerState = + | 'start' + | 'stop' + | 'restart' + | 'kill'; - public readonly client: PteroClient; - public readonly identifier: string; - public readonly uuid: string; - public name: string; - public isOwner: boolean; - public node: string; - public sftp:{ +export class ClientServer { + constructor(client: PteroClient, data: any); + client: PteroClient; + uuid: string; + identifier: string; + isOwner: boolean; + name: string; + node: number; + stfp:{ ip: string; port: number; }; - public description: string | null; - public limits: object; - public featureLimits: object; - public state: string; - public installing: boolean; - public users: SubUserManager; - public allocations: AllocationManager; - public permissions: Permissions; - public databases: DatabaseManager; - public files: FileManager; - public schedules: Dict | null; + description: string | null; + limits: object; + featureLimits: object; + suspended: boolean; + state: string; + installing: boolean; + users: SubUserManager; + allocations: NetworkAllocationManager; + permissions: Permissions; + databases: ClientServerManager; + files: FileManager; + schedules: Dict; - public _patch(data: object): void; - public addWebSocket(): void; - public sendCommand(command: string): Promise; - public setPowerState(state: 'start'|'stop'|'restart'|'kill'): Promise; + _patch(data: any): void; + get panelURL(): string; + addWebsocket(): void; + fetchResouces(): void; + sendCommand(command: string): Promise; + setPowerState(state: PowerState): Promise; } export interface DictConstructor { - new (): Dict; - new (entries?: Array): Dict; - new (iterable?: Iterable): Dict; + new(): Dict; + new(entries?: readonly [K, V][]): Dict; + new(iterable?: Iterable): Dict; + readonly [Symbol.iterator]: DictConstructor; readonly [Symbol.species]: DictConstructor; } export class Dict extends Map { - public ['constructor']: DictConstructor; + ['constructor']: DictConstructor; - public has(key: K): boolean; - public get(key: K): V | undefined; - public set(key: K, value: V): this; - public delete(key: K): boolean; + has(key: K): boolean; + get(key: K): V | undefined; + set(key: K, value: V): this; + delete(key: K): boolean; - public some(fn: (value: V, key: K, dict: this) => boolean): boolean; - public every(fn: (value: V, key: K, dict: this) => boolean): boolean; - public hasAny(...keys: K[]): boolean; - public hasAll(...keys: K[]): boolean; + some(fn: (value: V, key: K, dict: this) => boolean): boolean; + every(fn: (value: V, key: K, dict: this) => boolean): boolean; + hasAny(...keys: K[]): boolean; + hasAll(...keys: K[]): boolean; - public first(amount?: number): V | V[] | undefined; - public last(amount?: number): V | V[] | undefined; - public random(amount?: number): V | V[] | undefined; + first(amount?: number): V | V[] | undefined; + last(amount?: number): V | V[] | undefined; + random(amount?: number): V | V[] | undefined; - public map(fn: (value: V, key: K, dict: this) => T): T[]; - public filter(fn: (value: V, key: K, dict: this) => boolean): Dict; - public filter(fn: (value: V, key: K, dict: this) => key is k): Dict; - public filter(fn: (value: V, key: K, dict: this) => value is v): Dict; - public filter(fn: (value: V, key: K, dict: this) => k): Dict; - public find(fn: (value: V, key: K, dict: this) => boolean): V | undefined; - public find(fn: (value: V, key: K, dict: this) => value is v): v | undefined; - public sweep(fn: (value: V, key: K, dict: this) => boolean): number; - public part(fn: (value: V, key: K, dict: this) => boolean): Dict[]; - public part(fn: (value: V, key: K, dict: this) => key is k): Dict[]; - public part(fn: (value: V, key: K, dict: this) => value is v): Dict[]; + map(fn: (value: V, key: K, dict: this) => T): T[]; + filter(fn: (value: V, key: K, dict: this) => boolean): Dict; + filter(fn: (value: V, key: K, dict: this) => key is k): Dict; + filter(fn: (value: V, key: K, dict: this) => value is v): Dict; + filter(fn: (value: V, key: K, dict: this) => k): Dict; + filter(fn: (value: V, key: K, dict: this) => v): Dict; + find(fn: (value: V, key: K, dict: this) => boolean): V | undefined; + find(fn: (value: V, key: K, dict: this) => key is k): V | undefined; + find(fn: (value: V, key: K, dict: this) => value is v): V | undefined; + sweep(fn: (value: V, key: K, dict: this) => boolean): number; + part(fn: (value: V, key: K, dict: this) => boolean): Dict[]; + part(fn: (value: V, key: K, dict: this) => key is k): Dict[]; + part(fn: (value: V, key: K, dict: this) => value is v): Dict[]; - public reduce(fn: (value: V, key: K, dict: this) => boolean, acc: T): T; - public join(...dict: Dict[]): Dict; - public difference(dict: Dict): Dict; + reduce(fn: (value: V, key: K, dict: this) => boolean, acc: T): T; + join(...dicts: Dict[]): Dict; + difference(dict: Dict): Dict; +} + +export class RequestError extends Error { + constructor(message: string); +} + +export class PteroAPIError extends Error { + constructor(data: any); + code: string; +} + +export class WebSocketError extends Error { + constructor(message: string); +} + +export interface NodeUpdateOptions { + name?: string; + location?: string; + fqdn?: string; + scheme?: string; + memory?: number; + disk?: number; + sftp?:{ + port?: number; + listener?: number; + }; + upload_size?: number; + memory_overallocate?: number; + disk_overallocate?: number; } export class Node { - constructor(client: PteroApp, data: object); - - public readonly client: PteroApp; - public readonly id: number; - public readonly uuid: string; - public public: boolean; // cursed 2.0 - public name: string; - public description: string | null; - public locationId: number; - public location: NodeLocation | null; - public servers: Map | null; - public fqdn: string; - public scheme: string; - public behindProxy: boolean; - public maintenance: string; - public memory: number; - public overallocatedMemory: number; - public overallocatedDisk: number; - public uploadSize: number; - public daemon:{ - listening: string; - sftp: string; + constructor(client: PteroApp, data: any); + client: PteroApp; + id: number; + uuid: string; + public: boolean; + name: string; + description: string | null; + locationId: number; + location: NodeLocation | undefined; + servers: Dict | undefined; + fqdn: string; + scheme: string; + behindProxy: boolean; + maintenance: boolean; + memory: number; + overallocatedMemory: number; + disk: number; + overallocatedDisk: number; + uploadSize: number; + daemon:{ + listening: number; + sftp: number; base: string; }; - public readonly createdAt: Date; - public updatedAt: Date | null; + createdAt: Date; + updatedAt: Date | null; - public _patch(data: string): void; - public getConfig(): Promise; - public update(options:{ - name?: string; - location?: number; - fpdn?: string; - scheme?: string; - memory?: number; - disk?: number; - stfp?:{ - port: number; - listener: string; - }; - upload_size?: number; - memory_overallocate?: number; - disk_overallocate?: number; - }): Promise; - public delete(): Promise; - public toJSON(): object; + _patch(data: any): void; + get adminURL(): string; + getConfig(): Promise; + update(options: NodeUpdateOptions): Promise; + delete(): Promise; + toJSON(): object; } -export type PermissionResolvable = string[] | number[] | object; - -export interface PermissionFlags { - WEBSOCKET_CONNECT: 0; - - CONTROL_CONSOLE: 1; - CONTROL_START: 2; - CONTROL_STOP: 3; - CONTROL_RESTART: 4; - - USER_CREATE: 5; - USER_READ: 6; - USER_UPDATE: 7; - USER_DELETE: 8; - - FILE_CREATE: 9; - FILE_READ: 10; - FILE_UPDATE: 11; - FILE_DELETE: 12; - FILE_ARCHIVE: 13; - FILE_SFTP: 14; - - BACKUP_CREATE: 15; - BACKUP_READ: 16; - BACKUP_UPDATE: 17; - BACKUP_DELETE: 18; - - ALLOCATION_READ: 19; - ALLOCATION_CREATE: 20; - ALLOCATION_UPDATE: 21; - ALLOCATION_DELETE: 22; - - STARTUP_READ: 23; - STARTUP_UPDATE: 24; - - DATABASE_CREATE: 25; - DATABASE_READ: 26; - DATABASE_UPDATE: 27; - DATABASE_DELETE: 28; - DATABASE_VIEW_PASSWORD: 29; - - SCHEDULE_CREATE: 30; - SCHEDULE_READ: 31; - SCHEDULE_UPDATE: 32; - SCHEDULE_DELETE: 33; - - SETTINGS_RENAME: 34; - SETTINGS_REINSTALL: 35; - - '*': 40; - ADMIN_WEBSOCKET_ERRORS: 41; - ADMIN_WEBSOCKET_INSTALL: 42; - ADMIN_WEBSOCKET_TRANSFER: 43; -} +export type PermissionFlags = { [key: string]: number }; +export type PermissionResolvable = + | string[] + | number[] + | object; export class Permissions { + static get FLAGS(): Readonly; + static get DEFAULT(): Readonly; + constructor(data: PermissionResolvable); + raw: PermissionFlags; - public raw: { [key: string]: number }; - public static get FLAGS(): Readonly; - public static get DEFAULT(): Readonly; - - public has(perms: string|number|PermissionResolvable): boolean; - public isAdmin(): boolean; - public static resolve(perms: PermissionResolvable): { [key: string]: number }; - public serialize(): { [key: string]: boolean }; - public toArray(): string[]; - public toStrings(): string[]; - public static fromStrings(perms: string[]): { [key: string]: number }; + has(perms: string | number | PermissionResolvable): boolean; + isAdmin(): boolean; + static resolve(perms: PermissionResolvable): PermissionFlags; + serialize(): { [key: string]: boolean }; + toArray(): string[]; + toStrings(): string[]; + static fromStrings(perms: string[]): PermissionFlags; } export type ScheduleAction = @@ -736,110 +857,98 @@ export interface ScheduleTask { updatedAt: Date | null; } +export interface ScheduleUpdateOptions { + name?: string; + active?: boolean; + minute?: string; + hour?: boolean; + dayOfWeek?: boolean; + dayOfMonth?: boolean; +} + export class Schedule { - constructor(client: PteroClient, serverId: string, data: object); + constructor(client: PteroClient, serverId: string, data: any); + client: PteroClient; + serverId: string; + tasks: Dict; + id: number; + name: string; + cron:{ + week: string; + month: string; + hour: string; + minute: string; + }; + active: boolean; + processing: boolean; + lastRunAt: Date | null; + nextRunAt: Date; + createdAt: Date; + updatedAt: Date | null; - public readonly client: PteroClient; - public readonly serverId: string; - public readonly id: number; - public name: string; - public tasks: Dict; - public cron: { [key: string]: string } - public active: boolean; - public processing: boolean; - public lastRunAt: Date | null; - public nextRunAt: Date; - public readonly createdAt: Date; - public updatedAt: Date | null; - - public update(options:{ - name?: string; - active?: boolean; - minute?: string; - hour?: string; - dayOfWeek?: string; - dayOfMonth?: string; - }): Promise; - public createTask(action: ScheduleAction, payload: string, offset: number): Promise; - public updateTask( - id: number, - options:{ - action?: ScheduleAction; - payload?: string; - offset?: number; - } - ): Promise; - public deleteTask(id: number): Promise; - public delete(): Promise; -} - -export class RequestError extends Error { - constructor(message: string); -} - -export class PteroAPIError extends Error { - constructor(message: object); - - public code: string; -} - -export class WebSocketError extends Error { - constructor(message: string); + _patch(data: any): void; + _resolveTask(data: any): ScheduleTask; + get panelURL(): string; + update(options: ScheduleUpdateOptions): Promise; + createTask(action: string, payload: string, offset: string): Promise; + updateTask(id: number, options:{ action: string; payload: string; offset: string }): Promise; + deleteTask(id: number): Promise; + delete(): Promise; } export class BaseUser { - constructor(client: PteroApp|PteroClient, data: object); + constructor(client: PteroApp | PteroClient, data: any); + client: PteroApp | PteroClient; + id?: number; + username?: string; + email?: string; + firstname?: string; + lastname?: string; + language?: string; - public readonly client: PteroApp | PteroClient; - public readonly id: number; - public username: string; - public email: string; - public firstname: string; - public lastname: string; - public language: string; - - public _patch(data: object): void; - public toString(): string; - public toJSON(): object; + toString(): string; + toJSON(): object; } export class PteroUser extends BaseUser { - constructor(client: PteroApp, data: object); + constructor(client: PteroApp, data: any); + client: PteroApp; + id: number; + uuid: string; + externalId: string; + username: string; + email: string; + firstname: string; + lastname: string; + langauge: string; + isAdmin: boolean; + tfa: boolean; + twoFactor: boolean; + relationships: Dict | undefined; + createdAt: Date; + createdTimestamp: number; + updatedAt: Date | null; + updatedTimestamp: number | null; - public readonly client: PteroApp; - public externalId: string; - public uuid: string; - public isAdmin: boolean; - public tfa: string; - public createdAt: Date; - public updatedAt: Date | null; - public relationships: Dict | null; - - public override _patch(data: object): void; - public update(options:{ - email?: string; - username?: string; - firstname?: string; - lastname?: string; - password: string; - }): Promise; - public delete(): Promise; + get adminURL(): string; + update(options: Partial): Promise; + delete(): Promise; } export class PteroSubUser extends BaseUser { - constructor(client: PteroClient, data: object); + constructor(client: PteroClient, data: any); + client: PteroClient; + uuid: string; + identifier: string; + _server: string; + image: string; + enabled: boolean; + permissions: Permissions; + createdAt: Date; + createdTimestamp: number; - public readonly client: PteroClient; - public readonly _server: string; - public readonly uuid: string; - public image: string; - public enabled: boolean; - public readonly createdAt: Date; - public createdTimestamp: number; - public permissions: Permissions; - - public override _patch(data: object): void; - public setPermissions(perms: PermissionResolvable): Promise; + get panelURL(): string; + setPermissions(perms: PermissionResolvable): Promise; } export interface APIKey { @@ -851,70 +960,23 @@ export interface APIKey { } export class ClientUser extends BaseUser { - constructor(client: PteroClient, data: object); + constructor(client: PteroClient, data: any); + client: PteroClient; + uuid: string; + identifier: string; + image: string; + enabled: boolean; + isAdmin: boolean; + tokens: string[]; + apikeys: APIKey[]; - public readonly client: PteroClient; - public isAdmin: boolean; - public tokens: string[]; - public apikeys: APIKey[]; - - public get2faCode(): Promise; - public enable2fa(code: string): Promise; - public disable2fa(password: string): Promise; - public updateEmail(email: string, password: string): Promise; - public updatePassword(oldpass: string, newpass: string): Promise; - public fetchKeys(): Promise; - public createKey(description: string, allowed?: string[]): Promise; - public deleteKey(id: string): Promise; -} - -// Extensions - -export interface StatusOptions { - domain: string; - auth: string; - nodes: number[]; - callInterval: number; - nextInterval?: number; - retryLimit?: number; -} - -export interface StatusEvents { - debug: [message: string]; - connect: [id: number]; - interval: [node: object]; - disconnect: [id: number]; -} - -export class NodeStatus extends EventEmitter { - constructor(options: StatusOptions); - - private interval: NodeJS.Timer | null; - private connected: Set; - public headers: { [key: string]: string }; - public domain: string; - public auth: string; - public nodes: number[]; - public callInterval: number; - public nextInterval: number; - public retryLimit: number; - public ping: number; - public current: number; - public readyAt: number; - - public onConnect: (id: string) => any; - public onInterval: (node: object) => any; - public onDisconnect: (id: string) => any; - - #debug(message: string): void; - public connect(): Promise; - #ping(): Promise; - #handleNext(): Promise; - #request(id: number): Promise; - public close(message?: string, error?: boolean): void; - - public emit(event: E, ...args: StatusEvents[E]): boolean; - public on(event: E, listener: (...args: StatusEvents[E]) => any): this; - public once(event: E, listener: (...args: StatusEvents[E]) => any): this; - public off(event: E, listener: (...args: StatusEvents[E]) => any): this; + get panelURL(): string; + get2faCode(): Promise; + enable2fa(): Promise; + disable2fa(password: string): Promise; + updateEmail(email: string, password: string): Promise; + updatePassword(oldpass: string, newpass: string): Promise; + fetchKeys(): Promise; + createKey(description: string, allowed?: string[]): Promise; + deleteKey(id: string): Promise; } diff --git a/node_modules/@devnote-dev/pterojs/src/index.js b/node_modules/@devnote-dev/pterojs/src/index.js index e034f1a..62612c2 100644 --- a/node_modules/@devnote-dev/pterojs/src/index.js +++ b/node_modules/@devnote-dev/pterojs/src/index.js @@ -2,48 +2,46 @@ module.exports = { version: require('../package.json').version, // Application API + ApplicationServerManager: require('./application/ApplicationServerManager'), + NestEggsManager: require('./application/NestEggsManager'), + NestManager: require('./application/NestManager'), + NodeAllocationManager: require('./application/NodeAllocationManager'), + NodeLocationManager: require('./application/NodeLocationManager'), + NodeManager: require('./application/NodeManager'), PteroApp: require('./application/PteroApp'), UserManager: require('./application/UserManager'), - NodeManager: require('./application/NodeManager'), - NestManager: require('./application/NestManager'), - NestEggsManager: require('./application/NestEggsManager'), - ApplicationServerManager: require('./application/ApplicationServerManager'), - NodeLocationManager: require('./application/NodeLocationManager'), - ApplicationRequestManager: require('./application/ApplicationRequestManager'), // Client API - PteroClient: require('./client/PteroClient'), - ClientServerManager: require('./client/ClientServerManager'), - ScheduleManager: require('./client/ScheduleManager'), - ClientRequestManager: require('./client/ClientRequestManager'), - BackupManager: require('./client/BackupManager'), - SubUserManager: require('./client/SubUserManager'), - - // Websocket Shard: require('./client/ws/Shard'), WebSocketManager: require('./client/ws/WebSocketManager'), - // Global Managers - AllocationManager: require('./managers/AllocationManager'), - DatabaseManager: require('./managers/DatabaseManager'), - FileManager: require('./managers/FileManager'), + BackupManager: require('./client/BackupManager'), + ClientDatabaseManager: require('./client/ClientDatabaseManager'), + ClientServerManager: require('./client/ClientServerManager'), + FileManager: require('./client/FileManager'), + NetworkAllocationManager: require('./client/NetworkAllocationManager'), + PteroClient: require('./client/PteroClient'), + ScheduleManager: require('./client/ScheduleManager'), + SubUserManager: require('./client/SubUserManager'), - // Package Structures + // Extensions + NodeStatus: require('./extensions/NodeStatus'), + + // HTTP + RequestManager: require('./http/RequestManager'), + + // Structures ApplicationServer: require('./structures/ApplicationServer'), ClientServer: require('./structures/ClientServer'), Dict: require('./structures/Dict'), + ...require('./structures/Errors'), Node: require('./structures/Node'), Permissions: require('./structures/Permissions'), - /** @deprecated Use configLoader util instead. */ - Presets: require('./structures/Presets'), Schedule: require('./structures/Schedule'), - ...require('./structures/Errors'), ...require('./structures/User'), - // Utils - configLoader: require('./structures/configLoader'), - caseConv: require('./structures/caseConv'), - - // Extensions - NodeStatus: require('./extensions/NodeStatus') + // Utility + caseConv: require('./util/caseConv'), + configLoader: require('./util/configLoader'), + query: require('./util/query') }; diff --git a/node_modules/@devnote-dev/pterojs/src/managers/AllocationManager.js b/node_modules/@devnote-dev/pterojs/src/managers/AllocationManager.js deleted file mode 100644 index 6d4caba..0000000 --- a/node_modules/@devnote-dev/pterojs/src/managers/AllocationManager.js +++ /dev/null @@ -1,104 +0,0 @@ -const Dict = require('../structures/Dict'); -const endpoints = require('../client/endpoints'); - -class AllocationManager { - constructor(client, server, data) { - this.client = client; - this.server = server; - - /** - * Whether the client using this manager is the PteroClient or PteroApp. - * @type {boolean} - */ - this.isClient = client.constructor.name === 'PteroClient'; - - /** @type {Dict} */ - this.cache = new Dict(); - this._patch(data); - } - - _patch(data) { - if (!data?.allocations && !data?.data && !data?.attributes) return; - if (data.allocations) data = data.allocations; - if (data.data) { - const res = new Dict(); - for (let o of data.data) { - o = o.attributes; - res.set(o.id, { - id: o.id, - ip: o.ip, - ipAlias: o.ip_alias, - port: o.port, - notes: o.notes ?? null, - isDefault: o.is_default - }); - } - res.forEach((v, k) => this.cache.set(k, v)); - return res; - } else { - data = data.attributes; - const o = { - id: data.id, - ip: data.ip, - ipAlias: data.ip_alias, - port: data.port, - notes: data.notes ?? null, - isDefault: data.is_default - } - this.cache.set(data.id, o); - return o; - } - } - - async fetch() { - return this._patch( - await this.client.requests.make( - endpoints.servers.network.main(this.server.identifier) - ) - ); - } - - async assign() { - return this._patch( - await this.client.requests.make( - endpoints.servers.network.main(this.server.identifier), null, 'POST' - ) - ); - } - - async setNote(id, note) { - const data = await this.client.requests.make( - endpoints.servers.network.get(this.server.identifier, id), - { notes: note }, 'POST' - ); - return this._patch(data); - } - - async setPrimary(id) { - return this._patch( - await this.client.requests.make( - endpoints.servers.network.primary(this.server.identifier, id), null, 'POST' - ) - ); - } - - async unassign(id) { - await this.client.requests.make( - endpoints.servers.network.get(this.server.identifier, id), null, 'DELETE' - ); - this.cache.delete(id); - } -} - -module.exports = AllocationManager; - -/** - * Represents an allocation for a server. - * @typedef {object} Allocation - * @property {number} id The ID of the allocation. - * @property {string} ip The IP of the allocation. - * @property {?string} ipAlias An alias for the IP. - * @property {number} port The port for the allocation. - * @property {?string} notes Additional notes for the allocation. - * @property {boolean} isDefault Whether it is a default allocation. - */ diff --git a/node_modules/@devnote-dev/pterojs/src/managers/DatabaseManager.js b/node_modules/@devnote-dev/pterojs/src/managers/DatabaseManager.js deleted file mode 100644 index 6db00d0..0000000 --- a/node_modules/@devnote-dev/pterojs/src/managers/DatabaseManager.js +++ /dev/null @@ -1,104 +0,0 @@ -const Dict = require('../structures/Dict'); -const endpoints = require('../client/endpoints'); - -class DatabaseManager { - constructor(client, server, data) { - this.client = client; - this.server = server; - - /** - * Whether the client using this manager is the PteroClient or PteroApp. - * @type {boolean} - */ - this.isClient = client.constructor.name === 'PteroClient'; - - /** @type {Dict} */ - this.cache = new Dict(); - this._patch(data); - } - - _patch(data) { - if (!data?.databases && !data?.data && !data?.attributes) return; - if (data.databases) data = data.databases.data; - if (data.data) { - const res = new Dict(); - for (let db of data.data) { - db = db.attributes; - res.set(db.id, { - id: db.id, - host: db.host, - name: db.name, - username: db.username, - password: db.password ?? null, - connections: db.connections, - maxConnections: db.max_connections - }); - } - res.forEach((v, k) => this.cache.set(k, v)); - return res; - } else { - data = data.attributes; - const o = { - id: data.id, - host: data.host, - name: data.name, - username: data.username, - password: data.password ?? null, - connections: data.connections, - maxConnections: data.max_connections - } - this.cache.set(data.id, o); - return o; - } - } - - async fetch(withPass = false) { - if (!this.isClient) return Promise.resolve(); - const data = await this.client.requests.make( - endpoints.servers.databases.main(this.server.identifier) + (withPass ? '?include=password' : '') - ); - return this._patch(data); - } - - async create(database, remote) { - if (!this.isClient) return Promise.resolve(); - const data = await this.client.requests.make( - endpoints.servers.databases.get(this.server.identifier), - { database, remote }, 'POST' - ); - return this._patch(data); - } - - async rotate(id) { - if (!this.isClient) return Promise.resolve(); - const data = await this.client.requests.make( - endpoints.servers.databases.rotate(this.server.identifier, id), null, 'POST' - ); - return this._patch(data); - } - - async delete(id) { - if (!this.isClient) return Promise.resolve(); - await this.client.requests.make( - endpoints.servers.databases.delete(this.server.identifier, id), null, 'DELETE' - ); - this.cache.delete(id); - return true; - } -} - -module.exports = DatabaseManager; - -/** - * Represents a server database object. - * @typedef {object} Database - * @property {string} id The ID of the database. - * @property {object} host Host information for the database. - * @property {string} host.address The address of the database. - * @property {number} host.port The port allocated to this database. - * @property {string} name The name of the database. - * @property {string} username The username for the database. - * @property {?string} password The password for this database. - * @property {string} connections Connections to the database. - * @property {number} maxConnections The max amount of connections allowed for this database. - */ diff --git a/node_modules/@devnote-dev/pterojs/src/managers/FileManager.js b/node_modules/@devnote-dev/pterojs/src/managers/FileManager.js deleted file mode 100644 index ff218e8..0000000 --- a/node_modules/@devnote-dev/pterojs/src/managers/FileManager.js +++ /dev/null @@ -1,273 +0,0 @@ -const endpoints = require('../client/endpoints'); - -class FileManager { - constructor(client, server, data) { - this.client = client; - this.server = server; - - /** - * Whether the client using this manager is the PteroClient or PteroApp. - * @type {boolean} - */ - this.isClient = client.constructor.name === 'PteroClient'; - - /** @type {Map>} */ - this.cache = new Map(); - this.cache.set('/', new Map()); - this._patch(data); - } - - _patch(data) { - if (!data?.files && !data?.data && !data?.attributes) return; - if (data.files) data = data.files.data; - const dir = decodeURIComponent(data._dir); - if (data.data) { - const res = new Map(); - for (let o of data.data) { - o = o.attributes; - res.set(o.name, { - name: o.name, - mode: o.mode, - modeBits: BigInt(o.mode_bits ?? -1), - size: o.size, - isFile: o.is_file, - isSymlink: o.is_symlink, - isEditable: o.is_editable, - mimetype: o.mimetype, - createdAt: new Date(o.created_at), - modifiedAt: o.modified_at ? new Date(o.modified_at) : null - }); - } - let hold = this.cache.get(dir); - if (!hold) { - this.cache.set(dir, new Map()); - hold = new Map(); - } - res.forEach((v, k) => hold.set(k, v)); - this.cache.set(dir, hold); - return res; - } else { - data = data.attributes; - const o = { - name: data.name, - mode: data.mode, - modeBits: BigInt(data.mode_bits ?? -1), - size: data.size, - isFile: data.is_file, - isSymlink: data.is_symlink, - isEditable: data.is_editable, - mimetype: data.mimetype, - createdAt: new Date(data.created_at), - modifiedAt: data.modified_at ? new Date(data.modified_at) : null - } - let hold = this.cache.get(dir); - if (!hold) { - this.cache.set(dir, new Map()); - hold = new Map(); - } - hold.set(data.name, o); - this.cache.set(dir, hold); - return o; - } - } - - /** - * Fetches all files from a specified directory (default is the root folder: `/home/container`). - * @param {string} [dir] The directory (folder) to fetch from. - * @returns {Promise>} - */ - async fetch(dir) { - if (!this.isClient) return Promise.resolve(); - dir &&= dir.startsWith('.') ? dir.slice(1) : dir; - dir &&= encodeURIComponent(dir); - const data = await this.client.requests.make( - endpoints.servers.files.main(this.server.identifier) + (dir ? `?directory=${dir}` : '') - ); - data._dir = dir ?? '/'; - return this._patch(data); - } - - /** - * Returns the contents of a specified file. - * @param {string} filePath The path to the file in the server. - * @returns {Promise} - */ - async getContents(filePath) { - if (!this.isClient) return Promise.resolve(); - if (filePath.startsWith('.')) filePath = filePath.slice(1); - filePath = encodeURIComponent(filePath); - const data = await this.client.requests.make( - endpoints.servers.files.contents(this.server.identifier, filePath) - ); - return data.toString(); - } - - /** - * Returns a URL that can be used to download the specified file. - * @param {string} filePath The path to the file in the server. - * @returns {Promise} - */ - async download(filePath) { - if (!this.isClient) return Promise.resolve(); - if (filePath.startsWith('.')) filePath = filePath.slice(1); - filePath = encodeURIComponent(filePath); - const data = await this.client.requests.make( - endpoints.servers.files.download(this.server.identifier, filePath) - ); - return data.attributes.url; - } - - /** - * Renames the specified file. - * EXPERIMENTAL: may not be working properly. - * @param {string} filePath The path to the file in the server. - * @param {string} name The new name of the file. - * @returns {Promise} - * @protected - */ - async rename(filePath, name) { - if (!this.isClient) return Promise.resolve(); - filePath ??= '/'; - filePath = filePath.startsWith('.') ? filePath.slice(1) : filePath; - const sub = filePath.split('/'); - await this.client.requests.make( - endpoints.servers.files.rename(this.server.identifier), - { - root: filePath, - files:[{ - from: sub.pop(), - to: name - }] - }, - 'PUT' - ); - } - - /** - * Creates a copy of the specified file in the same directory. - * @param {string} filePath The path to the file in the server. - * @returns {Promise} - */ - async copy(filePath) { - if (!this.isClient) return Promise.resolve(); - if (filePath.startsWith('.')) filePath = filePath.slice(1); - await this.client.requests.make( - endpoints.servers.files.copy(this.server.identifier), - { location: filePath }, 'POST' - ); - } - - /** - * Writes content to the specified file. - * @param {string} filePath The path to the file in the server. - * @param {string|Buffer} content The content to write to the file. - * @returns {Promise} - */ - async write(filePath, content) { - if (!this.isClient) return Promise.resolve(); - if (filePath.startsWith('.')) filePath = filePath.slice(1); - filePath = encodeURIComponent(filePath); - if (content instanceof Buffer) content = content.toString(); - await this.client.requests.make( - endpoints.servers.files.write(this.server.identifier, filePath), - { raw: content }, 'POST' - ); - } - - /** - * Compresses one or more files into a zip file (`tar.gz`). - * @param {string} dir The directory (folder) of the file(s). - * @param {string[]} files An array of the file name(s) to compress. - * @returns {Promise} The compressed file. - */ - async compress(dir, files) { - if (!this.isClient) return Promise.resolve(); - if (!Array.isArray(files)) throw new TypeError('Files must be an array.'); - if (!files.every(n => typeof n === 'string')) throw new Error('File names must be type string.'); - if (dir.startsWith('.')) dir = dir.slice(1); - const data = await this.client.requests.make( - endpoints.servers.files.compress(this.server.identifier), - { root: dir, files }, 'POST' - ); - return this._patch(data); - } - - /** - * Decompresses a zip file to it's original contents. - * @param {string} dir The directory (folder) of the file. - * @param {string} file The name of file to decompress. - * @returns {Promise} - */ - async decompress(dir, file) { - if (!this.isClient) return Promise.resolve(); - if (dir.startsWith('.')) dir = dir.slice(1); - if (file.startsWith('.')) file = file.slice(1); - await this.client.requests.make( - endpoints.servers.files.decompress(this.server.identifier), - { root: dir, file }, 'POST' - ); - } - - /** - * Deletes one or more files in the specified directory. - * @param {string} dir The directory (folder) of the file(s). - * @param {string[]} files An array of the file name(s) to delete. - * @returns {Promise} - */ - async delete(dir, files) { - if (!this.isClient) return Promise.resolve(); - if (!Array.isArray(files)) throw new TypeError('Files must be an array.'); - if (!files.every(n => typeof n === 'string')) throw new Error('File names must be type string.'); - if (dir.startsWith('.')) dir = dir.slice(1); - await this.client.requests.make( - endpoints.servers.files.delete(this.server.identifier), - { root: dir, files }, 'POST' - ); - } - - /** - * Creates a new folder in a specified directory. - * @param {string} dir The directory (folder) to create the folder in. - * @param {string} name The name of the folder. - * @returns {Promise} - */ - async createFolder(dir, name) { - if (!this.isClient) return Promise.resolve(); - await this.client.requests.make( - endpoints.servers.files.create(this.server.identifier), - { root: dir, name }, 'POST' - ); - } - - /** - * Returns an upload URL that can be used to upload files to the server. - * @returns {Promise} The upload URL. - */ - async getUploadURL() { - if (!this.isClient) return Promise.resolve(); - const data = await this.client.requests.make( - endpoints.servers.files.upload(this.server.identifier) - ); - return data.attributes.url; - } -} - -module.exports = FileManager; - -/** - * Represents a file-like object on a Pterodactyl server. - * The object can be an instance of a file, directory or symbolic link. - * * {@link PteroFile.isFile} - * * {@link PteroFile.isSymlink} - * @typedef {object} PteroFile - * @property {string} name The name of the file. - * @property {string} mode The file permissions mode. - * @property {bigint} modeBits The bitfield representatio of the mode. - * @property {number} size The size of the file (bytes). - * @property {boolean} isFile Whether the object is a file. - * @property {boolean} isSymlink Whether the file is a symbolic link. - * @property {boolean} isEditable Whether the file can be edited. - * @property {string} mimetype The mimetype of the file. - * @property {Date} createdAt The date when the database was created. - * @property {?Date} modifiedAt The date of the last recorded modification. - */ diff --git a/node_modules/@devnote-dev/pterojs/src/structures/ApplicationServer.js b/node_modules/@devnote-dev/pterojs/src/structures/ApplicationServer.js index 109745f..89f5a32 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/ApplicationServer.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/ApplicationServer.js @@ -1,20 +1,36 @@ -const AllocationManager = require('../managers/AllocationManager'); -const DatabaseManager = require('../managers/DatabaseManager'); -const FileManager = require('../managers/FileManager'); const { PteroUser } = require('./User'); const Node = require('./Node'); -const caseConv = require('./caseConv'); +const caseConv = require('../util/caseConv'); const endpoints = require('../application/endpoints'); class ApplicationServer { constructor(client, data) { this.client = client; + /** + * The of the server (separate from UUID). + * @type {number} + */ + this.id = data.id; + + /** + * The internal UUID of the server. + * @type {string} + */ + this.uuid = data.uuid; + + /** + * A substring of the server's UUID to easily identify it. + * @type {string} + */ + this.identifier = data.identifier; + /** * The date the server was created. * @type {Date} */ this.createdAt = new Date(data.created_at); + /** @type {number} */ this.createdTimestamp = this.createdAt.getTime(); @@ -23,28 +39,14 @@ class ApplicationServer { * @type {?Date} */ this.updatedAt = data.updated_at ? new Date(data.updated_at) : null; + /** @type {?number} */ this.updatedTimestamp = this.updatedAt?.getTime() || null; - /** @type {DatabaseManager} */ - this.databases = new DatabaseManager(client, data); - /** @type {FileManager} */ - this.files = new FileManager(client, data); - /** @type {AllocationManager} */ - this.allocations = new AllocationManager(client, this, data); - this._patch(data); } _patch(data) { - if ('id' in data) { - /** - * The of the server (separate from UUID). - * @type {number} - */ - this.id = data.id; - } - if ('external_id' in data) { /** * The external ID of the server (if set). @@ -53,22 +55,6 @@ class ApplicationServer { this.externalId = data.external_id ?? null; } - if ('uuid' in data) { - /** - * The internal UUID of the server. - * @type {string} - */ - this.uuid = data.uuid; - } - - if ('identifier' in data) { - /** - * A substring of the server's UUID to easily identify it. - * @type {string} - */ - this.identifier = data.identifier; - } - if ('name' in data) { /** * The name of the server. @@ -136,13 +122,13 @@ class ApplicationServer { this.nodeId = data.node; } - if ('-' in data) { + if (!this.node) { /** * The node object that the server is part of. This can be fetched by including * 'node' in the ApplicationServerManager.fetch. * @type {?Node} */ - this.node = null; + this.node = this.client.nodes.resolve(data); } if ('allocation' in data) { @@ -177,6 +163,22 @@ class ApplicationServer { } } + /** + * Returns a formatted URL to the server. + * @returns {string} The formatted URL. + */ + get panelURL() { + return `${this.client.domain}/server/${this.identifier}`; + } + + /** + * Returns a formatted URL to the server in the admin panel. + * @returns {string} The formatted URL. + */ + get adminURL() { + return `${this.client.domain}/admin/servers/view/${this.id}`; + } + /** * Fetches the PteroUser object of the server owner. * The user can be accessed via {@link ApplicationServer.owner}. @@ -208,8 +210,8 @@ class ApplicationServer { payload.external_id = options.externalId ?? this.externalId; payload.description = options.description ?? this.description; - await this.client.requests.make( - endpoints.servers.details(this.id), payload, 'PATCH' + await this.client.requests.patch( + endpoints.servers.details(this.id), payload ); this._patch(payload); @@ -218,10 +220,44 @@ class ApplicationServer { /** * Updates the server's build structure. - * @param {object} options Build options. - * @todo + * @param {object} options Update build options. + * @param {number} [options.allocation] The ID of the allocation for the server. + * @param {number} [options.swap] Server space swap option. + * @param {number} [options.memory] The amount of memory allowed for the server. + * @param {number} [options.disk] The amount of disk allowed for the server. + * @param {number} [options.cpu] The amount of CPU to allow for the server. + * @param {?number} [options.threads] The number of threads for the server. + * @param {number} [options.io] + * @param {object} [options.featureLimits] Feature limits options. + * @param {number} [options.featureLimits.allocations] The server allocations limit. + * @param {number} [options.featureLimits.backups] The server backups limit. + * @param {number} [options.featureLimits.databases] The server databases limit. + * @returns {Promise} The updated server instance. */ - async updateBuild(options = {}) {} + async updateBuild(options = {}) { + if (!Object.keys(options).length) throw new Error('Too few options to update.'); + + options.allocation ??= this.allocation; + options.swap ??= this.limits.swap ?? 0; + options.memory ??= this.memory; + options.disk ??= this.disk; + options.cpu ??= this.limits.cpu ?? 0; + options.threads ??= this.limits.threads; + options.io ??= this.limits.io; + options.featureLimits ??= {}; + options.featureLimits.allocations ??= this.featureLimits.allocations ?? 0; + options.featureLimits.backups ??= this.featureLimits.backups ?? 0; + options.featureLimits.databases ??= this.featureLimits.databases ?? 0; + + // TODO: caseConv update + options.feature_limits = caseConv.snakeCase(options.featureLimits); + await this.client.requests.patch( + endpoints.servers.build(this.id), options + ); + + this._patch(options); + return this; + } /** * Updates the server's startup configuration. @@ -235,7 +271,9 @@ class ApplicationServer { * @returns {Promise} */ async suspend() { - await this.client.requests.make(endpoints.servers.suspend(this.id), null, 'POST'); + await this.client.requests.post( + endpoints.servers.suspend(this.id), null + ); this.suspended = true; } @@ -244,7 +282,9 @@ class ApplicationServer { * @returns {Promise} */ async unsuspend() { - await this.client.requests.make(endpoints.servers.unsuspend(this.id), null, 'POST'); + await this.client.requests.post( + endpoints.servers.unsuspend(this.id), null + ); this.suspended = false; } @@ -253,7 +293,9 @@ class ApplicationServer { * @returns {Promise} */ async reinstall() { - await this.client.requests.make(endpoints.servers.reinstall(this.id), null, 'POST'); + await this.client.requests.post( + endpoints.servers.reinstall(this.id), null + ); } /** diff --git a/node_modules/@devnote-dev/pterojs/src/structures/ClientServer.js b/node_modules/@devnote-dev/pterojs/src/structures/ClientServer.js index d6e3c3a..6efe3d1 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/ClientServer.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/ClientServer.js @@ -1,8 +1,8 @@ -const SubUserManager = require('../client/SubUserManager'); -const AllocationManager = require('../managers/AllocationManager'); -const DatabaseManager = require('../managers/DatabaseManager'); -const FileManager = require('../managers/FileManager'); +const ClientDatabaseManager = require('../client/ClientDatabaseManager'); +const FileManager = require('../client/FileManager'); +const NetworkAllocationManager = require('../client/NetworkAllocationManager'); const Permissions = require('./Permissions'); +const SubUserManager = require('../client/SubUserManager'); const endpoints = require('../client/endpoints'); class ClientServer { @@ -10,14 +10,30 @@ class ClientServer { this.client = client; const attr = data.attributes; + /** + * The internal UUID of the server. + * @type {string} + */ + this.uuid = attr.uuid; + + /** + * A substring of the server's UUID to easily identify it. + * @type {string} + */ + this.identifier = attr.identifier; + /** @type {SubUserManager} */ this.users = new SubUserManager(client, this); - /** @type {AllocationManager} */ - this.allocations = new AllocationManager(client, this, attr.relationships); + + /** @type {NetworkAllocationManager} */ + this.allocations = new NetworkAllocationManager(client, this); + /** @type {Permissions} */ this.permissions = new Permissions(data.meta?.user_permissions ?? {}); - /** @type {DatabaseManager} */ - this.databases = new DatabaseManager(client, this, attr.relationships); + + /** @type {ClientDatabaseManager} */ + this.databases = new ClientDatabaseManager(client, this, attr.relationships); + /** @type {FileManager} */ this.files = new FileManager(client, this, attr.relationships); @@ -33,22 +49,6 @@ class ClientServer { this.isOwner = data.server_owner; } - if ('identifier' in data) { - /** - * A substring of the server's UUID to easily identify it. - * @type {string} - */ - this.identifier = data.identifier; - } - - if ('uuid' in data) { - /** - * The internal UUID of the server. - * @type {string} - */ - this.uuid = data.uuid; - } - if ('name' in data) { /** * The name of the server. @@ -127,6 +127,14 @@ class ClientServer { } } + /** + * Returns a formatted URL to the server. + * @returns {string} The formatted URL. + */ + get panelURL() { + return `${this.client.domain}/server/${this.identifier}`; + } + /** * Adds the server to the WebSocket connection list to be established. * @returns {void} @@ -140,7 +148,7 @@ class ClientServer { } /** @todo */ - get resources() {} + async fetchResources() {} /** * Sends a command to the server terminal. @@ -148,8 +156,8 @@ class ClientServer { * @returns {Promise} */ async sendCommand(command) { - await this.client.requests.make( - endpoints.servers.command(this.identifier), { command }, 'POST' + await this.client.requests.post( + endpoints.servers.command(this.identifier), { command } ); } @@ -163,9 +171,11 @@ class ClientServer { * @returns {Promise} */ async setPowerState(state) { - if (!['start', 'stop', 'restart', 'kill'].includes(state)) throw new Error('Invalid power state.'); - await this.client.requests.make( - endpoints.servers.power(this.identifier), { signal: state }, 'POST' + if (!['start', 'stop', 'restart', 'kill'].includes(state)) + throw new Error('Invalid power state.'); + + await this.client.requests.post( + endpoints.servers.power(this.identifier), { signal: state } ); this.state = state; } diff --git a/node_modules/@devnote-dev/pterojs/src/structures/Errors.js b/node_modules/@devnote-dev/pterojs/src/structures/Errors.js index 0a9edd8..154c1aa 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/Errors.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/Errors.js @@ -4,9 +4,12 @@ exports.RequestError = class RequestError extends Error { exports.PteroAPIError = class PteroAPIError extends Error { constructor(data) { - data = data.errors[0]; - super(`[${data.status}] ${data.detail}`); - this.code = data.code; + const fmt = data.errors.map( + e => `- ${e.status}: ${e.detail || 'No details provided'}` + ).join('\n'); + + super('\n'+ fmt); + this.code = data.errors[0].code; } } diff --git a/node_modules/@devnote-dev/pterojs/src/structures/Node.js b/node_modules/@devnote-dev/pterojs/src/structures/Node.js index 61c82d9..016dc5d 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/Node.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/Node.js @@ -1,5 +1,5 @@ const { NodeLocation } = require('../application/NodeLocationManager'); -const caseConv = require('./caseConv'); +const caseConv = require('../util/caseConv'); const endpoints = require('../application/endpoints'); class Node { @@ -7,6 +7,18 @@ class Node { this.client = client; data = data.attributes; + /** + * The ID of the node. + * @type {number} + */ + this.id = data.id; + + /** + * The internal UUID of the node. + * @type {string} + */ + this.uuid = data.uuid; + /** * The date the node was created. * @type {Date} @@ -23,22 +35,6 @@ class Node { } _patch(data) { - if ('id' in data) { - /** - * The ID of the node. - * @type {number} - */ - this.id = data.id; - } - - if ('uuid' in data) { - /** - * The internal UUID of the node. - * @type {string} - */ - this.uuid = data.uuid; - } - if ('public' in data) { /** * Whether the node is public to other users. @@ -174,12 +170,22 @@ class Node { } } + /** + * Returns a formatted URL to the node in the admin panel. + * @returns {string} The formatted URL. + */ + get adminURL() { + return `${this.client.domain}/admin/nodes/view/${this.id}`; + } + /** * Returns the node's config (untyped). * @returns {Promise} The node config. */ async getConfig() { - return await this.client.requests.make(endpoints.nodes.config(this.id)); + return await this.client.requests.get( + endpoints.nodes.config(this.id) + ); } /** diff --git a/node_modules/@devnote-dev/pterojs/src/structures/Permissions.js b/node_modules/@devnote-dev/pterojs/src/structures/Permissions.js index 75b13cb..4072ccc 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/Permissions.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/Permissions.js @@ -13,42 +13,42 @@ const FLAGS = { FILE_CREATE: 9, FILE_READ: 10, - FILE_UPDATE: 11, - FILE_DELETE: 12, - FILE_ARCHIVE: 13, - FILE_SFTP: 14, + 'FILE_READ-CONTENT': 11, + FILE_UPDATE: 12, + FILE_DELETE: 13, + FILE_ARCHIVE: 14, + FILE_SFTP: 15, - BACKUP_CREATE: 15, - BACKUP_READ: 16, - BACKUP_UPDATE: 17, - BACKUP_DELETE: 18, + BACKUP_CREATE: 16, + BACKUP_READ: 17, + BACKUP_UPDATE: 18, + BACKUP_DELETE: 19, - ALLOCATION_READ: 19, - ALLOCATION_CREATE: 20, - ALLOCATION_UPDATE: 21, - ALLOCATION_DELETE: 22, + ALLOCATION_READ: 20, + ALLOCATION_CREATE: 21, + ALLOCATION_UPDATE: 22, + ALLOCATION_DELETE: 23, - STARTUP_READ: 23, - STARTUP_UPDATE: 24, + STARTUP_READ: 24, + STARTUP_UPDATE: 25, - DATABASE_CREATE: 25, - DATABASE_READ: 26, - DATABASE_UPDATE: 27, - DATABASE_DELETE: 28, - DATABASE_VIEW_PASSWORD: 29, + DATABASE_CREATE: 26, + DATABASE_READ: 27, + DATABASE_UPDATE: 28, + DATABASE_DELETE: 29, + DATABASE_VIEW_PASSWORD: 30, - SCHEDULE_CREATE: 30, - SCHEDULE_READ: 31, - SCHEDULE_UPDATE: 32, - SCHEDULE_DELETE: 33, + SCHEDULE_CREATE: 31, + SCHEDULE_READ: 32, + SCHEDULE_UPDATE: 33, + SCHEDULE_DELETE: 34, - SETTINGS_RENAME: 34, - SETTINGS_REINSTALL: 35, + SETTINGS_RENAME: 35, + SETTINGS_REINSTALL: 36, - '*': 40, - ADMIN_WEBSOCKET_ERRORS: 41, - ADMIN_WEBSOCKET_INSTALL: 42, - ADMIN_WEBSOCKET_TRANSFER: 43 + ADMIN_WEBSOCKET_ERRORS: 40, + ADMIN_WEBSOCKET_INSTALL: 41, + ADMIN_WEBSOCKET_TRANSFER: 42 } class Permissions { @@ -163,6 +163,7 @@ class Permissions { */ static fromStrings(perms) { const res = {}; + if (perms.includes('*')) return Object.assign({}, Permissions.FLAGS); for (let p of perms) { p = p.toUpperCase().replace(/\./g, '_'); if (Permissions.FLAGS[p] === undefined) throw new Error(`Unknown permission '${p}'.`); diff --git a/node_modules/@devnote-dev/pterojs/src/structures/Presets.js b/node_modules/@devnote-dev/pterojs/src/structures/Presets.js deleted file mode 100644 index 4768bef..0000000 --- a/node_modules/@devnote-dev/pterojs/src/structures/Presets.js +++ /dev/null @@ -1,50 +0,0 @@ -const { ApplicationOptions } = require('../application/PteroApp'); -const { ClientOptions } = require('../client/PteroClient'); - -/** - * Creates a preset application option object with all the options not - * specified by the user. - * @param {object} data Data to parse application options from. - * @returns {ApplicationOptions} - * @deprecated Use configLoader util instead. - */ -function application(data) { - if (typeof data !== 'object') throw new TypeError('Invalid application options object.'); - - data.fetchUsers ??= false; - data.fetchNodes ??= false; - data.fetchNests ??= false; - data.fetchServers ??= false; - data.fetchLocations ??= false; - - data.cacheUsers ??= true; - data.cacheNodes ??= true; - data.cacheNests ??= true; - data.cacheServers ??= true; - data.cacheLocations ??= true; - - return data; -} - -/** - * Creates a preset client option object with all the options not - * specified by the user. - * @param {object} data Data to parse client options from. - * @returns {ClientOptions} - * @deprecated Use configLoader util instead. - */ -function client(data) { - if (typeof data !== 'object') throw new TypeError('Invalid client options object.'); - - data.ws ??= false; - data.fetchClient ??= true; - data.fetchServers ??= false; - data.cacheServers ??= true; - data.cacheSubUsers ??= true; - data.disableEvents ??= []; - - return data; -} - -exports.application = application; -exports.client = client; diff --git a/node_modules/@devnote-dev/pterojs/src/structures/Schedule.js b/node_modules/@devnote-dev/pterojs/src/structures/Schedule.js index aa11747..459ff30 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/Schedule.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/Schedule.js @@ -5,6 +5,7 @@ class Schedule { constructor(client, serverId, data) { this.client = client; this.serverId = serverId; + /** @type {Dict} */ this.tasks = new Dict(); data = data.attributes; @@ -111,10 +112,19 @@ class Schedule { createdAt: new Date(data.created_at), updatedAt: data.updated_at ? new Date(data.updated_at) : null } + this.tasks.set(obj.id, obj); return obj; } + /** + * Returns a formatted URL to the schedule. + * @returns {string} The formatted URL. + */ + get panelURL() { + return `${this.client.domain}/server/${this.serverId}/schedules/${this.id}`; + } + /** * Updates the schedule. * @param {object} options Schedule update options. @@ -138,10 +148,12 @@ class Schedule { * @returns {Promise} The new schedule task. */ async createTask(action, payload, offset) { - if (!['command', 'power', 'backup'].includes(action)) throw new TypeError('Invalid task action type.'); - const data = await this.client.requests.make( + if (!['command', 'power', 'backup'].includes(action)) + throw new TypeError('Invalid task action type.'); + + const data = await this.client.requests.post( endpoints.servers.schedules.tasks.main(this.serverId, this.id), - { action, payload, time_offset: offset }, 'POST' + { action, payload, time_offset: offset } ); return this._resolveTask(data); } @@ -156,14 +168,16 @@ class Schedule { * @returns {Promise} The updated schedule task. */ async updateTask(id, options = {}) { - if (Object.keys(options).length < 3) throw new Error('Missing required ScheduleTask update options.'); + if (Object.keys(options).length < 3) + throw new Error('Missing required ScheduleTask update options.'); + if (!['command', 'power', 'backup'].includes(options.action)) throw new TypeError('Invalid task action type.'); options.time_offset = options.offset; - const data = await this.client.requests.make( + const data = await this.client.requests.post( endpoints.servers.schedules.tasks.get(this.serverId, this.id, id), - options, 'POST' + options ); return this._resolveTask(data); } @@ -174,9 +188,8 @@ class Schedule { * @returns {Promise} */ async deleteTask(id) { - await this.client.requests.make( - endpoints.servers.schedules.tasks.get(this.serverId, this.id, id), - null, 'DELETE' + await this.client.requests.delete( + endpoints.servers.schedules.tasks.get(this.serverId, this.id, id) ); this.tasks.delete(id); return true; diff --git a/node_modules/@devnote-dev/pterojs/src/structures/User.js b/node_modules/@devnote-dev/pterojs/src/structures/User.js index 58a4656..b3c442c 100644 --- a/node_modules/@devnote-dev/pterojs/src/structures/User.js +++ b/node_modules/@devnote-dev/pterojs/src/structures/User.js @@ -2,9 +2,11 @@ const ApplicationServer = require('./ApplicationServer'); const Permissions = require('./Permissions'); const { PermissionResolvable } = require('./Permissions'); const Dict = require('./Dict'); -const caseConv = require('./caseConv'); +const caseConv = require('../util/caseConv'); const c_path = require('../client/endpoints'); +let loggedDeprecated = false; + class BaseUser { constructor(client, data) { this.client = client; @@ -63,6 +65,11 @@ class BaseUser { class PteroUser extends BaseUser { constructor(client, data) { super(client, data); + + /** @type {string} */ + this.uuid = data.uuid; + + this._patch(data); } _patch(data) { @@ -73,24 +80,34 @@ class PteroUser extends BaseUser { this.externalId = data.external_id; } - if ('uuid' in data) { - /** @type {string} */ - this.uuid = data.uuid; - } - if ('root_admin' in data) { /** @type {boolean} */ this.isAdmin = data.root_admin ?? false; } if ('2fa' in data) { - /** @type {boolean} */ + /** + * @type {boolean} + * @deprecated Use {@link PteroUser.twoFactor} instead. + */ this.tfa = data['2fa']; + + /** @type {boolean} */ + this.twoFactor = data['2fa']; + + if (!loggedDeprecated) { + process.emitWarning( + "'PteroUser#tfa' is deprecated, use 'PteroUser#twoFactor' instead", + 'Deprecated' + ); + loggedDeprecated = true; + } } if ('created_at' in data) { /** @type {Date} */ this.createdAt = new Date(data.created_at); + /** @type {number} */ this.createdTimestamp = this.createdAt.getTime(); } @@ -98,6 +115,7 @@ class PteroUser extends BaseUser { if ('updated_at' in data) { /** @type {?Date} */ this.updatedAt = data['updated_at'] ? new Date(data['updated_at']) : null; + /** @type {?number} */ this.updatedTimestamp = this.updatedAt?.getTime() || null; } @@ -111,6 +129,14 @@ class PteroUser extends BaseUser { } } + /** + * Returns a formatted URL to the user in the admin panel. + * @returns {string} The formatted URL. + */ + get adminURL() { + return `${this.client.domain}/admin/users/view/${this.id}`; + } + /** * Updates the specified user's account. * @param {number|PteroUser} user The user to update. @@ -140,11 +166,15 @@ class PteroSubUser extends BaseUser { constructor(client, server, data) { super(client, data); + /** @type {string} */ + this.uuid = data.uuid; + /** @type {string} */ this._server = server; /** @type {Date} */ this.createdAt = new Date(data.created_at); + /** @type {number} */ this.createdTimestamp = this.createdAt.getTime(); @@ -157,11 +187,6 @@ class PteroSubUser extends BaseUser { _patch(data) { super._patch(data); - if ('uuid' in data) { - /** @type {string} */ - this.uuid = data.uuid; - } - if ('image' in data) { /** @type {string} */ this.image = data.image; @@ -173,6 +198,14 @@ class PteroSubUser extends BaseUser { } } + /** + * Returns a formatted URL to the subuser. + * @returns {string} The formatted URL. + */ + get panelURL() { + return `${this.client.domain}/server/${this._server}/users`; + } + /** * Updates the subuser's server permissions. * @param {PermissionResolvable} perms The permissions to set. @@ -180,8 +213,9 @@ class PteroSubUser extends BaseUser { */ async setPermissions(perms) { perms = new Permissions(perms); - await this.client.requests.make( - c_path.servers.users.get(this._server, this.uuid), { permissions: perms.toStrings() }, 'POST' + await this.client.requests.post( + c_path.servers.users.get(this._server, this.uuid), + { permissions: perms.toStrings() } ); this.permissions = perms; return this; @@ -209,6 +243,14 @@ class ClientUser extends BaseUser { this.apikeys = []; } + /** + * Returns a formatted URL to the client account. + * @returns {string} The formatted URL. + */ + get panelURL() { + return `${this.client.domain}/account`; + } + /** * Fetches a 2FA code linked to the client's account. * @returns {Promise} The 2FA code. @@ -224,8 +266,8 @@ class ClientUser extends BaseUser { * @returns {Promise} The auth tokens. */ async enable2fa(code) { - const data = await this.client.requests.make( - c_path.account.tfa, { code }, 'POST' + const data = await this.client.requests.post( + c_path.account.tfa, { code } ); this.tokens.push(...data.attributes.tokens); return this.tokens; @@ -237,8 +279,8 @@ class ClientUser extends BaseUser { * @returns {Promise} */ async disable2fa(password) { - await this.client.requests.make( - c_path.account.tfa, { password }, 'DELETE' + await this.client.requests.delete( + c_path.account.tfa, { password } ); this.tokens = []; } @@ -250,8 +292,8 @@ class ClientUser extends BaseUser { * @returns {Promise} The updated client user instance. */ async updateEmail(email, password) { - await this.client.requests.make( - c_path.account.email, { email, password }, 'PUT' + await this.client.requests.put( + c_path.account.email, { email, password } ); this.email = email; return this; @@ -265,15 +307,14 @@ class ClientUser extends BaseUser { * @returns {Promise} */ async updatePassword(oldpass, newpass) { - if (oldpass === newpass) return; - return await this.client.requests.make( + if (oldpass === newpass) return Promise.resolve(); + return await this.client.requests.put( c_path.account.password, { current_password: oldpass, password: newpass, password_confirmation: newpass - }, - 'PUT' + } ); } @@ -284,6 +325,7 @@ class ClientUser extends BaseUser { async fetchKeys() { const data = await this.client.requests.make(c_path.account.apikeys); this.apikeys = []; + for (let o of data.data) { o = o.attributes; this.apikeys.push({ @@ -294,6 +336,7 @@ class ClientUser extends BaseUser { createdAt: new Date(o.created_at) }); } + return this.apikeys; } @@ -304,11 +347,11 @@ class ClientUser extends BaseUser { * @returns {Promise} The new API key. */ async createKey(description, allowed = []) { - const data = await this.client.requests.make( + const data = await this.client.requests.post( c_path.account.apikeys, - { description, allowed_ips: allowed }, - 'POST' + { description, allowed_ips: allowed } ); + const att = data.attributes; this.apikeys.push({ identifier: att.identifier, @@ -317,6 +360,7 @@ class ClientUser extends BaseUser { lastUsedAt: att.last_used_at ? new Date(att.last_used_at) : null, createdAt: new Date(att.created_at) }); + return this.apikeys.find(k => k.identifier === att.identifier); } @@ -326,7 +370,9 @@ class ClientUser extends BaseUser { * @returns {Promise} */ async deleteKey(id) { - await this.client.requests.make(c_path.account.apikeys +`/${id}`, null, 'DELETE'); + await this.client.requests.delete( + c_path.account.apikeys +`/${id}` + ); this.apikeys = this.apikeys.filter(k => k.identifier !== id); } } diff --git a/node_modules/@devnote-dev/pterojs/src/structures/caseConv.js b/node_modules/@devnote-dev/pterojs/src/structures/caseConv.js deleted file mode 100644 index 256e508..0000000 --- a/node_modules/@devnote-dev/pterojs/src/structures/caseConv.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Parses a class or object into a JSON object with camelCase keys. - * @param {any} obj The object to convert. - * @param {string[]} [ignore] An array of keys to ignore when parsing. - * @returns {object} The parsed JSON object. - */ -function camelCase(obj, ignore = []) { - const entries = Object.entries(obj); - const parsed = {}; - for (const [k, v] of entries) { - if (ignore.includes(k)) continue; - parsed[toCamelCase(k)] = v; - } - return parsed; -} - -function toCamelCase(str) { - let res = ''; - let next = false; - str.split('').forEach(c => { - if (next) { - next = false; - res += c.toUpperCase(); - } else if (c === '_') { - next = true; - } else res += c; - }); - return res; -} - -/** - * Parses a class or object into a JSON object with snake_case keys. - * @param {any} obj The object to convert. - * @param {string[]} [ignore] An array of keys to ignore when parsing. - * @returns {object} The parsed JSON object. - */ -function snakeCase(obj, ignore = []) { - const entries = Object.entries(obj); - const parsed = {}; - for (const [k, v] of entries) { - if (ignore.includes(k)) continue; - parsed[toSnakeCase(k)] = v; - } - return parsed; -} - -function toSnakeCase(str) { - let res = ''; - str.split('').forEach(c => { - if (isUpper(c)) res += '_'; - res += c.toLowerCase(); - }); - return res; -} - -function isUpper(c) { - return 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('').includes(c); -} - -module.exports = { camelCase, snakeCase }; diff --git a/node_modules/@devnote-dev/pterojs/src/structures/configLoader.js b/node_modules/@devnote-dev/pterojs/src/structures/configLoader.js deleted file mode 100644 index 734671c..0000000 --- a/node_modules/@devnote-dev/pterojs/src/structures/configLoader.js +++ /dev/null @@ -1,89 +0,0 @@ -const { join } = require('path'); - -const DEFAULT = { - APPLICATION:{ - users:{ - fetch: false, - cache: true, - max: -1 - }, - nodes:{ - fetch: false, - cache: true, - max: -1 - }, - nests:{ - fetch: false, - cache: true, - max: -1 - }, - servers:{ - fetch: false, - cache: true, - max: -1 - }, - locations:{ - fetch: false, - cache: true, - max: -1 - } - }, - - CLIENT:{ - ws: false, - fetchClient: true, - servers:{ - fetch: false, - cache: true, - max: -1 - }, - subUsers:{ - fetch: false, - cache: true, - max: -1 - }, - disableEvents:[] - } -} - -function parseAs(from, to) { - const res = {}; - for (const [k, v] of Object.entries(to)) res[k] = k in from ? from[k] : v; - for (const [k, v] of Object.entries(res)) if (v.max === -1) res[k].max = Infinity; - return res; -} - -function appConfig(options) { - if ( - options !== null && - typeof options === 'object' && - Object.keys(options).length - ) return parseAs(options, DEFAULT.APPLICATION); - try { - options = require(join(process.cwd(), 'pterojs.json')); - return parseAs(options.application ?? {}, DEFAULT.APPLICATION); - } catch { - return DEFAULT.APPLICATION; - } -} - -function clientConfig(options) { - if ( - options !== null && - typeof options === 'object' && - Object.keys(options).length - ) return parseAs(options, DEFAULT.CLIENT); - try { - options = require(join(process.cwd(), 'pterojs.json')); - return parseAs(options.client ?? {}, DEFAULT.CLIENT); - } catch { - return DEFAULT.CLIENT; - } -} - -module.exports = { - DEFAULT, - parseAs, - appConfig, - clientConfig -} diff --git a/node_modules/@devnote-dev/pterojs/tests/app.test.js b/node_modules/@devnote-dev/pterojs/tests/app.test.js deleted file mode 100644 index 3206103..0000000 --- a/node_modules/@devnote-dev/pterojs/tests/app.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const { PteroApp } = require('@devnote-dev/pterojs'); -const { assert } = require('.'); -const { api_url, app_key } = require('./auth.json'); - -module.exports = async () => { - const client = new PteroApp(api_url, app_key); - await client.connect(); - - const users = await client.users.fetch(); - assert(users.size); - const nodes = await client.nodes.fetch(); - assert(nodes.size); - const nests = await client.nests.fetch(); - assert(nests.size); - const servers = await client.servers.fetch(); - assert(servers.size); - const locations = await client.locations.fetch(); - assert(locations.size); - - console.log( - `Fetch Results:\n${users.size} Users\n${nodes.size} `+ - `Node(s)\n${nests.size} Nest(s)\n${servers.size} server(s)`+ - `\n${locations.size} location(s).` - ); - - client.disconnect(); - delete users, nodes, nests, servers, locations; -} diff --git a/node_modules/@devnote-dev/pterojs/tests/client.test.js b/node_modules/@devnote-dev/pterojs/tests/client.test.js index bc5db68..6242bcf 100644 --- a/node_modules/@devnote-dev/pterojs/tests/client.test.js +++ b/node_modules/@devnote-dev/pterojs/tests/client.test.js @@ -1,26 +1,24 @@ -const { PteroClient } = require('@devnote-dev/pterojs'); -const { assert } = require('.'); -const { api_url, client_key } = require('./auth.json'); +const assert = require('assert'); +const { PteroClient } = require('../src'); +const { api_url, api_key } = require('./auth.json'); -module.exports = async () => { - const client = new PteroClient(api_url, client_key, { fetchClient: true }); - await client.connect(); +const app = new PteroClient(api_url, api_key); - assert(client.user !== null); - const servers = await client.servers.fetch(); - assert(servers.size); - const server = servers.random(); - const users = await server.users.fetch(); - assert(users.size !== null); - const schedules = await client.schedules.fetch(server.identifier); - assert(schedules.size !== null); +assert.doesNotThrow( + (async () => await app.connect()), + 'could not connect to api' +); - console.log( - `Fetch Results:\n${servers.size} Server(s)\n${users.size} `+ - `User(s) in server ${server.identifier}\n${schedules.size} Schedule(s) `+ - `for server ${server.identifier}` - ); +assert.doesNotThrow( + (async () => await app.fetchClient()), + 'could not fetch users endpoint' +); - client.disconnect(); - delete servers, server, users, schedules; -} +assert.ok(app.user, 'user not fetched'); + +assert.doesNotThrow( + (async () => await app.servers.fetch()), + 'could not fetch servers endpoint' +); + +app.disconnect(); diff --git a/node_modules/@devnote-dev/pterojs/tests/index.js b/node_modules/@devnote-dev/pterojs/tests/index.js index 72a1f42..2a0165e 100644 --- a/node_modules/@devnote-dev/pterojs/tests/index.js +++ b/node_modules/@devnote-dev/pterojs/tests/index.js @@ -1,49 +1,13 @@ -class AssertionError extends Error { - constructor() { super('Assertion failed') } -} - -function logTest(test) { - console.log( - '-'.repeat(15 + test.baseReturn.length) +'\n'+ - `Running Test\nName : ${test.name}\n`+ - `Description : ${test.description}\n`+ - `Return : ${test.baseReturn}\n`+ - '-'.repeat(15 + test.baseReturn.length) - ); -} - -function assert(ops) { - if (Boolean(ops) !== true) throw new AssertionError(); -} - -function test(name, exec, returnValue = null) { - this.meta = { - name, - description: null, - group: null, - baseReturn: (returnValue && typeof returnValue) || 'null' - } - - logTest(this.meta); - if (returnValue !== undefined) { - assert(exec() === returnValue); - } else { - assert(exec()); - } -} - -module.exports = { test, assert }; - (async () => { console.log('Running all tests...'); const { readdirSync } = require('fs'); - let count = 0, test; + let count = 0; + for (const mod of readdirSync(__dirname)) { if (!mod.endsWith('.test.js')) continue; + console.log(`\nRunning Test #${count++}\n`+ '='.repeat(20)); - test = require(`${__dirname}/${mod}`); - console.log(test, '\n'); - if (test) await test(); else 'Test Skipped...'; + require(`${__dirname}/${mod}`); } console.log('Completed all tests.'); })(); diff --git a/node_modules/@devnote-dev/pterojs/tests/main.test.js b/node_modules/@devnote-dev/pterojs/tests/main.test.js deleted file mode 100644 index 0c0c42d..0000000 --- a/node_modules/@devnote-dev/pterojs/tests/main.test.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = () => {} diff --git a/node_modules/@devnote-dev/pterojs/tests/status.test.js b/node_modules/@devnote-dev/pterojs/tests/status.test.js index 3d28ac9..53b280a 100644 --- a/node_modules/@devnote-dev/pterojs/tests/status.test.js +++ b/node_modules/@devnote-dev/pterojs/tests/status.test.js @@ -1,30 +1,31 @@ -const { NodeStatus } = require('@devnote-dev/pterojs'); -const { assert } = require('.'); +const assert = require('assert'); +const { NodeStatus } = require('../src'); const { api_url, app_key } = require('./auth.json'); -module.exports = async () => { - const status = new NodeStatus({ - domain: api_url, - auth: app_key, - nodes:[1], - callInterval: 30_000 - }); +const status = new NodeStatus({ + domain: api_url, + auth: app_key, + nodes:[1], + callInterval: 30_000 +}); - status.on('connect', id => console.log(`Connected to node ${id}`)); - status.on('disconnect', id => console.log(`Disconnected from node ${id}`)); - status.on('interval', node => { - assert(node !== null); - assert(Object.keys(node).length); +status.on('connect', id => console.log(`connected to node ${id}`)); +status.on('disconnect', id => console.log(`disconnected from node ${id}`)); +status.on('interval', node => { + assert.ok(node, 'invalid node payload received'); + assert.ok(Object.entries(node).length, 'empty node payload received'); - console.log(` - Node Info - ID: ${node.id} - Name: ${node.name} - Memory: ${node.memory} - Disk: ${node.disk} - `); - status.close(); - }); + console.log(` +Node Info +ID: ${node.id} +Name: ${node.name} +Memory: ${node.memory} +Disk: ${node.disk} + `); + status.close(); +}); - await status.connect(); -} +assert.doesNotThrow( + (async () => await status.connect()), + 'could not connect node status to api' +); diff --git a/node_modules/@mapbox/node-pre-gyp/bin/node-pre-gyp b/node_modules/@mapbox/node-pre-gyp/bin/node-pre-gyp old mode 100644 new mode 100755 diff --git a/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node b/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node old mode 100644 new mode 100755 index ccd21e4..5b30c32 Binary files a/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node and b/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node differ diff --git a/node_modules/bcrypt/test_alpine.sh b/node_modules/bcrypt/test_alpine.sh old mode 100644 new mode 100755 diff --git a/node_modules/body-parser/HISTORY.md b/node_modules/body-parser/HISTORY.md index 622f40c..e114f6a 100644 --- a/node_modules/body-parser/HISTORY.md +++ b/node_modules/body-parser/HISTORY.md @@ -1,3 +1,21 @@ +1.20.0 / 2022-04-02 +=================== + + * Fix error message for json parse whitespace in `strict` + * Fix internal error when inflated body exceeds limit + * Prevent loss of async hooks context + * Prevent hanging when request already read + * deps: depd@2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: http-errors@2.0.0 + - deps: depd@2.0.0 + - deps: statuses@2.0.1 + * deps: on-finished@2.4.1 + * deps: qs@6.10.3 + * deps: raw-body@2.5.1 + - deps: http-errors@2.0.0 + 1.19.2 / 2022-02-15 =================== diff --git a/node_modules/body-parser/README.md b/node_modules/body-parser/README.md index 7d7fa88..1149aff 100644 --- a/node_modules/body-parser/README.md +++ b/node_modules/body-parser/README.md @@ -342,6 +342,14 @@ to this middleware. This module operates directly on bytes only and you cannot call `req.setEncoding` when using this module. The `status` property is set to `500` and the `type` property is set to `'stream.encoding.set'`. +### stream is not readable + +This error will occur when the request is no longer readable when this middleware +attempts to read it. This typically means something other than a middleware from +this module read the reqest body already and the middleware was also configured to +read the same request. The `status` property is set to `500` and the `type` +property is set to `'stream.not.readable'`. + ### too many parameters This error will occur when the content of the request exceeds the configured @@ -453,4 +461,4 @@ app.use(bodyParser.text({ type: 'text/html' })) [downloads-image]: https://img.shields.io/npm/dm/body-parser.svg [downloads-url]: https://npmjs.org/package/body-parser [github-actions-ci-image]: https://img.shields.io/github/workflow/status/expressjs/body-parser/ci/master?label=ci -[github-actions-ci-url]: https://github.com/expressjs/body-parser?query=workflow%3Aci +[github-actions-ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js index c102609..fce6283 100644 --- a/node_modules/body-parser/lib/read.js +++ b/node_modules/body-parser/lib/read.js @@ -12,9 +12,11 @@ */ var createError = require('http-errors') +var destroy = require('destroy') var getBody = require('raw-body') var iconv = require('iconv-lite') var onFinished = require('on-finished') +var unpipe = require('unpipe') var zlib = require('zlib') /** @@ -89,9 +91,14 @@ function read (req, res, next, parse, debug, options) { _error = createError(400, error) } + // unpipe from stream and destroy + if (stream !== req) { + unpipe(req) + destroy(stream, true) + } + // read off entire request - stream.resume() - onFinished(req, function onfinished () { + dump(req, function onfinished () { next(createError(400, _error)) }) return @@ -179,3 +186,20 @@ function contentstream (req, debug, inflate) { return stream } + +/** + * Dump the contents of a request. + * + * @param {object} req + * @param {function} callback + * @api private + */ + +function dump (req, callback) { + if (onFinished.isFinished(req)) { + callback(null) + } else { + onFinished(req, callback) + req.resume() + } +} diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js index 2971dc1..c2745be 100644 --- a/node_modules/body-parser/lib/types/json.js +++ b/node_modules/body-parser/lib/types/json.js @@ -37,7 +37,7 @@ module.exports = json * %x0D ) ; Carriage return */ -var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex +var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex /** * Create a middleware to parse JSON bodies. @@ -122,7 +122,7 @@ function json (options) { // assert charset per RFC 7159 sec 8.1 var charset = getCharset(req) || 'utf-8' - if (charset.substr(0, 4) !== 'utf-') { + if (charset.slice(0, 4) !== 'utf-') { debug('invalid charset') next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { charset: charset, @@ -152,7 +152,9 @@ function json (options) { function createStrictSyntaxError (str, char) { var index = str.indexOf(char) - var partial = str.substring(0, index) + '#' + var partial = index !== -1 + ? str.substring(0, index) + '#' + : '' try { JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') @@ -173,7 +175,11 @@ function createStrictSyntaxError (str, char) { */ function firstchar (str) { - return FIRST_CHAR_REGEXP.exec(str)[1] + var match = FIRST_CHAR_REGEXP.exec(str) + + return match + ? match[1] + : undefined } /** diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json index b418b45..9a03357 100644 --- a/node_modules/body-parser/package.json +++ b/node_modules/body-parser/package.json @@ -1,7 +1,7 @@ { "name": "body-parser", "description": "Node.js body parsing middleware", - "version": "1.19.2", + "version": "1.20.0", "contributors": [ "Douglas Christopher Wilson ", "Jonathan Ong (http://jongleberry.com)" @@ -12,13 +12,15 @@ "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "devDependencies": { "eslint": "7.32.0", @@ -29,7 +31,7 @@ "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", "methods": "1.1.2", - "mocha": "9.2.0", + "mocha": "9.2.2", "nyc": "15.1.0", "safe-buffer": "5.2.1", "supertest": "6.2.2" @@ -38,10 +40,12 @@ "lib/", "LICENSE", "HISTORY.md", + "SECURITY.md", "index.js" ], "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" }, "scripts": { "lint": "eslint .", diff --git a/node_modules/color-support/bin.js b/node_modules/color-support/bin.js old mode 100644 new mode 100755 diff --git a/node_modules/cookie/HISTORY.md b/node_modules/cookie/HISTORY.md index 2d21760..ae9b995 100644 --- a/node_modules/cookie/HISTORY.md +++ b/node_modules/cookie/HISTORY.md @@ -1,3 +1,11 @@ +0.5.0 / 2022-04-11 +================== + + * Add `priority` option + * Fix `expires` option to reject invalid dates + * pref: improve default decode speed + * pref: remove slow string split in parse + 0.4.2 / 2022-02-02 ================== diff --git a/node_modules/cookie/README.md b/node_modules/cookie/README.md index e275c70..5449c3a 100644 --- a/node_modules/cookie/README.md +++ b/node_modules/cookie/README.md @@ -112,9 +112,23 @@ so if both are set, they should point to the same date and time. Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path is considered the ["default path"][rfc-6265-5.1.4]. +##### priority + +Specifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1]. + + - `'low'` will set the `Priority` attribute to `Low`. + - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set. + - `'high'` will set the `Priority` attribute to `High`. + +More information about the different priority levels can be found in +[the specification][rfc-west-cookie-priority-00-4.1]. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + ##### sameSite -Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-03-4.1.2.7]. +Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-09-5.4.7]. - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement. - `false` will not set the `SameSite` attribute. @@ -123,7 +137,7 @@ Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Coo - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement. More information about the different enforcement levels can be found in -[the specification][rfc-6265bis-03-4.1.2.7]. +[the specification][rfc-6265bis-09-5.4.7]. **note** This is an attribute that has not yet been fully standardized, and may change in the future. This also means many clients may ignore this attribute until they understand it. @@ -198,12 +212,12 @@ $ npm test ``` $ npm run bench -> cookie@0.4.1 bench +> cookie@0.4.2 bench > node benchmark/index.js - node@16.13.1 - v8@9.4.146.24-node.14 - uv@1.42.0 + node@16.14.0 + v8@9.4.146.24-node.20 + uv@1.43.0 zlib@1.2.11 brotli@1.0.9 ares@1.18.1 @@ -211,11 +225,11 @@ $ npm run bench nghttp2@1.45.1 napi@8 llhttp@6.0.4 - openssl@1.1.1l+quic - cldr@39.0 - icu@69.1 - tz@2021a - unicode@13.0 + openssl@1.1.1m+quic + cldr@40.0 + icu@70.1 + tz@2021a3 + unicode@14.0 ngtcp2@0.1.0-DEV nghttp3@0.1.0-DEV @@ -225,21 +239,22 @@ $ npm run bench 15 tests completed. - parse accounts.google.com x 504,358 ops/sec ±6.55% (171 runs sampled) - parse apple.com x 1,369,991 ops/sec ±0.84% (189 runs sampled) - parse cloudflare.com x 360,669 ops/sec ±3.75% (182 runs sampled) - parse docs.google.com x 521,496 ops/sec ±4.90% (180 runs sampled) - parse drive.google.com x 553,514 ops/sec ±0.59% (189 runs sampled) - parse en.wikipedia.org x 286,052 ops/sec ±0.62% (188 runs sampled) - parse linkedin.com x 178,817 ops/sec ±0.61% (192 runs sampled) - parse maps.google.com x 284,585 ops/sec ±0.68% (188 runs sampled) - parse microsoft.com x 161,230 ops/sec ±0.56% (192 runs sampled) - parse play.google.com x 352,144 ops/sec ±1.01% (181 runs sampled) - parse plus.google.com x 275,204 ops/sec ±7.78% (156 runs sampled) - parse support.google.com x 339,493 ops/sec ±1.02% (191 runs sampled) - parse www.google.com x 286,110 ops/sec ±0.90% (191 runs sampled) - parse youtu.be x 548,557 ops/sec ±0.60% (184 runs sampled) - parse youtube.com x 545,293 ops/sec ±0.65% (191 runs sampled) + parse accounts.google.com x 2,421,245 ops/sec ±0.80% (188 runs sampled) + parse apple.com x 2,684,710 ops/sec ±0.59% (189 runs sampled) + parse cloudflare.com x 2,231,418 ops/sec ±0.76% (186 runs sampled) + parse docs.google.com x 2,316,357 ops/sec ±1.28% (187 runs sampled) + parse drive.google.com x 2,363,543 ops/sec ±0.49% (189 runs sampled) + parse en.wikipedia.org x 839,414 ops/sec ±0.53% (189 runs sampled) + parse linkedin.com x 553,797 ops/sec ±0.63% (190 runs sampled) + parse maps.google.com x 1,314,779 ops/sec ±0.72% (189 runs sampled) + parse microsoft.com x 153,783 ops/sec ±0.53% (190 runs sampled) + parse play.google.com x 2,249,574 ops/sec ±0.59% (187 runs sampled) + parse plus.google.com x 2,258,682 ops/sec ±0.60% (188 runs sampled) + parse sites.google.com x 2,247,069 ops/sec ±0.68% (189 runs sampled) + parse support.google.com x 1,456,840 ops/sec ±0.70% (187 runs sampled) + parse www.google.com x 1,046,028 ops/sec ±0.58% (188 runs sampled) + parse youtu.be x 937,428 ops/sec ±1.47% (190 runs sampled) + parse youtube.com x 963,878 ops/sec ±0.59% (190 runs sampled) > node benchmark/parse.js @@ -247,20 +262,21 @@ $ npm run bench 6 tests completed. - simple x 1,266,646 ops/sec ±0.65% (191 runs sampled) - decode x 838,413 ops/sec ±0.60% (191 runs sampled) - unquote x 877,820 ops/sec ±0.72% (189 runs sampled) - duplicates x 516,680 ops/sec ±0.61% (191 runs sampled) - 10 cookies x 156,874 ops/sec ±0.52% (189 runs sampled) - 100 cookies x 14,663 ops/sec ±0.53% (191 runs sampled) + simple x 2,745,604 ops/sec ±0.77% (185 runs sampled) + decode x 557,287 ops/sec ±0.60% (188 runs sampled) + unquote x 2,498,475 ops/sec ±0.55% (189 runs sampled) + duplicates x 868,591 ops/sec ±0.89% (187 runs sampled) + 10 cookies x 306,745 ops/sec ±0.49% (190 runs sampled) + 100 cookies x 22,414 ops/sec ±2.38% (182 runs sampled) ``` ## References - [RFC 6265: HTTP State Management Mechanism][rfc-6265] -- [Same-site Cookies][rfc-6265bis-03-4.1.2.7] +- [Same-site Cookies][rfc-6265bis-09-5.4.7] -[rfc-6265bis-03-4.1.2.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7 +[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1 +[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7 [rfc-6265]: https://tools.ietf.org/html/rfc6265 [rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 [rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 diff --git a/node_modules/cookie/index.js b/node_modules/cookie/index.js index 55331d9..9c3d07d 100644 --- a/node_modules/cookie/index.js +++ b/node_modules/cookie/index.js @@ -20,8 +20,7 @@ exports.serialize = serialize; * @private */ -var decode = decodeURIComponent; -var encode = encodeURIComponent; +var __toString = Object.prototype.toString /** * RegExp to match field-content in RFC 7230 sec 3.2 @@ -52,31 +51,42 @@ function parse(str, options) { var obj = {} var opt = options || {}; - var pairs = str.split(';') var dec = opt.decode || decode; - for (var i = 0; i < pairs.length; i++) { - var pair = pairs[i]; - var index = pair.indexOf('=') + var index = 0 + while (index < str.length) { + var eqIdx = str.indexOf('=', index) - // skip things that don't look like key=value - if (index < 0) { - continue; + // no more cookie pairs + if (eqIdx === -1) { + break } - var key = pair.substring(0, index).trim() + var endIdx = str.indexOf(';', index) + + if (endIdx === -1) { + endIdx = str.length + } else if (endIdx < eqIdx) { + // backtrack on prior semicolon + index = str.lastIndexOf(';', eqIdx - 1) + 1 + continue + } + + var key = str.slice(index, eqIdx).trim() // only assign once - if (undefined == obj[key]) { - var val = pair.substring(index + 1, pair.length).trim() + if (undefined === obj[key]) { + var val = str.slice(eqIdx + 1, endIdx).trim() // quoted values - if (val[0] === '"') { + if (val.charCodeAt(0) === 0x22) { val = val.slice(1, -1) } obj[key] = tryDecode(val, dec); } + + index = endIdx + 1 } return obj; @@ -145,11 +155,13 @@ function serialize(name, val, options) { } if (opt.expires) { - if (typeof opt.expires.toUTCString !== 'function') { + var expires = opt.expires + + if (!isDate(expires) || isNaN(expires.valueOf())) { throw new TypeError('option expires is invalid'); } - str += '; Expires=' + opt.expires.toUTCString(); + str += '; Expires=' + expires.toUTCString() } if (opt.httpOnly) { @@ -160,6 +172,26 @@ function serialize(name, val, options) { str += '; Secure'; } + if (opt.priority) { + var priority = typeof opt.priority === 'string' + ? opt.priority.toLowerCase() + : opt.priority + + switch (priority) { + case 'low': + str += '; Priority=Low' + break + case 'medium': + str += '; Priority=Medium' + break + case 'high': + str += '; Priority=High' + break + default: + throw new TypeError('option priority is invalid') + } + } + if (opt.sameSite) { var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite; @@ -185,6 +217,42 @@ function serialize(name, val, options) { return str; } +/** + * URL-decode string value. Optimized to skip native call when no %. + * + * @param {string} str + * @returns {string} + */ + +function decode (str) { + return str.indexOf('%') !== -1 + ? decodeURIComponent(str) + : str +} + +/** + * URL-encode value. + * + * @param {string} str + * @returns {string} + */ + +function encode (val) { + return encodeURIComponent(val) +} + +/** + * Determine if value is a Date. + * + * @param {*} val + * @private + */ + +function isDate (val) { + return __toString.call(val) === '[object Date]' || + val instanceof Date +} + /** * Try decoding a string using a decoding function. * diff --git a/node_modules/cookie/package.json b/node_modules/cookie/package.json index cd40d0d..ed5606a 100644 --- a/node_modules/cookie/package.json +++ b/node_modules/cookie/package.json @@ -1,7 +1,7 @@ { "name": "cookie", "description": "HTTP server cookie parsing and serialization", - "version": "0.4.2", + "version": "0.5.0", "author": "Roman Shtylman ", "contributors": [ "Douglas Christopher Wilson " @@ -17,14 +17,16 @@ "benchmark": "2.1.4", "eslint": "7.32.0", "eslint-plugin-markdown": "2.2.1", - "mocha": "9.2.0", + "mocha": "9.2.2", "nyc": "15.1.0", - "top-sites": "1.1.85" + "safe-buffer": "5.2.1", + "top-sites": "1.1.97" }, "files": [ "HISTORY.md", "LICENSE", "README.md", + "SECURITY.md", "index.js" ], "engines": { @@ -33,7 +35,7 @@ "scripts": { "bench": "node benchmark/index.js", "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks --ui qunit test/", + "test": "mocha --reporter spec --bail --check-leaks test/", "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc --reporter=html --reporter=text npm test", "update-bench": "node scripts/update-benchmark.js", diff --git a/node_modules/core-util-is/float.patch b/node_modules/core-util-is/float.patch deleted file mode 100644 index a06d5c0..0000000 --- a/node_modules/core-util-is/float.patch +++ /dev/null @@ -1,604 +0,0 @@ -diff --git a/lib/util.js b/lib/util.js -index a03e874..9074e8e 100644 ---- a/lib/util.js -+++ b/lib/util.js -@@ -19,430 +19,6 @@ - // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - // USE OR OTHER DEALINGS IN THE SOFTWARE. - --var formatRegExp = /%[sdj%]/g; --exports.format = function(f) { -- if (!isString(f)) { -- var objects = []; -- for (var i = 0; i < arguments.length; i++) { -- objects.push(inspect(arguments[i])); -- } -- return objects.join(' '); -- } -- -- var i = 1; -- var args = arguments; -- var len = args.length; -- var str = String(f).replace(formatRegExp, function(x) { -- if (x === '%%') return '%'; -- if (i >= len) return x; -- switch (x) { -- case '%s': return String(args[i++]); -- case '%d': return Number(args[i++]); -- case '%j': -- try { -- return JSON.stringify(args[i++]); -- } catch (_) { -- return '[Circular]'; -- } -- default: -- return x; -- } -- }); -- for (var x = args[i]; i < len; x = args[++i]) { -- if (isNull(x) || !isObject(x)) { -- str += ' ' + x; -- } else { -- str += ' ' + inspect(x); -- } -- } -- return str; --}; -- -- --// Mark that a method should not be used. --// Returns a modified function which warns once by default. --// If --no-deprecation is set, then it is a no-op. --exports.deprecate = function(fn, msg) { -- // Allow for deprecating things in the process of starting up. -- if (isUndefined(global.process)) { -- return function() { -- return exports.deprecate(fn, msg).apply(this, arguments); -- }; -- } -- -- if (process.noDeprecation === true) { -- return fn; -- } -- -- var warned = false; -- function deprecated() { -- if (!warned) { -- if (process.throwDeprecation) { -- throw new Error(msg); -- } else if (process.traceDeprecation) { -- console.trace(msg); -- } else { -- console.error(msg); -- } -- warned = true; -- } -- return fn.apply(this, arguments); -- } -- -- return deprecated; --}; -- -- --var debugs = {}; --var debugEnviron; --exports.debuglog = function(set) { -- if (isUndefined(debugEnviron)) -- debugEnviron = process.env.NODE_DEBUG || ''; -- set = set.toUpperCase(); -- if (!debugs[set]) { -- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { -- var pid = process.pid; -- debugs[set] = function() { -- var msg = exports.format.apply(exports, arguments); -- console.error('%s %d: %s', set, pid, msg); -- }; -- } else { -- debugs[set] = function() {}; -- } -- } -- return debugs[set]; --}; -- -- --/** -- * Echos the value of a value. Trys to print the value out -- * in the best way possible given the different types. -- * -- * @param {Object} obj The object to print out. -- * @param {Object} opts Optional options object that alters the output. -- */ --/* legacy: obj, showHidden, depth, colors*/ --function inspect(obj, opts) { -- // default options -- var ctx = { -- seen: [], -- stylize: stylizeNoColor -- }; -- // legacy... -- if (arguments.length >= 3) ctx.depth = arguments[2]; -- if (arguments.length >= 4) ctx.colors = arguments[3]; -- if (isBoolean(opts)) { -- // legacy... -- ctx.showHidden = opts; -- } else if (opts) { -- // got an "options" object -- exports._extend(ctx, opts); -- } -- // set default options -- if (isUndefined(ctx.showHidden)) ctx.showHidden = false; -- if (isUndefined(ctx.depth)) ctx.depth = 2; -- if (isUndefined(ctx.colors)) ctx.colors = false; -- if (isUndefined(ctx.customInspect)) ctx.customInspect = true; -- if (ctx.colors) ctx.stylize = stylizeWithColor; -- return formatValue(ctx, obj, ctx.depth); --} --exports.inspect = inspect; -- -- --// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics --inspect.colors = { -- 'bold' : [1, 22], -- 'italic' : [3, 23], -- 'underline' : [4, 24], -- 'inverse' : [7, 27], -- 'white' : [37, 39], -- 'grey' : [90, 39], -- 'black' : [30, 39], -- 'blue' : [34, 39], -- 'cyan' : [36, 39], -- 'green' : [32, 39], -- 'magenta' : [35, 39], -- 'red' : [31, 39], -- 'yellow' : [33, 39] --}; -- --// Don't use 'blue' not visible on cmd.exe --inspect.styles = { -- 'special': 'cyan', -- 'number': 'yellow', -- 'boolean': 'yellow', -- 'undefined': 'grey', -- 'null': 'bold', -- 'string': 'green', -- 'date': 'magenta', -- // "name": intentionally not styling -- 'regexp': 'red' --}; -- -- --function stylizeWithColor(str, styleType) { -- var style = inspect.styles[styleType]; -- -- if (style) { -- return '\u001b[' + inspect.colors[style][0] + 'm' + str + -- '\u001b[' + inspect.colors[style][1] + 'm'; -- } else { -- return str; -- } --} -- -- --function stylizeNoColor(str, styleType) { -- return str; --} -- -- --function arrayToHash(array) { -- var hash = {}; -- -- array.forEach(function(val, idx) { -- hash[val] = true; -- }); -- -- return hash; --} -- -- --function formatValue(ctx, value, recurseTimes) { -- // Provide a hook for user-specified inspect functions. -- // Check that value is an object with an inspect function on it -- if (ctx.customInspect && -- value && -- isFunction(value.inspect) && -- // Filter out the util module, it's inspect function is special -- value.inspect !== exports.inspect && -- // Also filter out any prototype objects using the circular check. -- !(value.constructor && value.constructor.prototype === value)) { -- var ret = value.inspect(recurseTimes, ctx); -- if (!isString(ret)) { -- ret = formatValue(ctx, ret, recurseTimes); -- } -- return ret; -- } -- -- // Primitive types cannot have properties -- var primitive = formatPrimitive(ctx, value); -- if (primitive) { -- return primitive; -- } -- -- // Look up the keys of the object. -- var keys = Object.keys(value); -- var visibleKeys = arrayToHash(keys); -- -- if (ctx.showHidden) { -- keys = Object.getOwnPropertyNames(value); -- } -- -- // Some type of object without properties can be shortcutted. -- if (keys.length === 0) { -- if (isFunction(value)) { -- var name = value.name ? ': ' + value.name : ''; -- return ctx.stylize('[Function' + name + ']', 'special'); -- } -- if (isRegExp(value)) { -- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); -- } -- if (isDate(value)) { -- return ctx.stylize(Date.prototype.toString.call(value), 'date'); -- } -- if (isError(value)) { -- return formatError(value); -- } -- } -- -- var base = '', array = false, braces = ['{', '}']; -- -- // Make Array say that they are Array -- if (isArray(value)) { -- array = true; -- braces = ['[', ']']; -- } -- -- // Make functions say that they are functions -- if (isFunction(value)) { -- var n = value.name ? ': ' + value.name : ''; -- base = ' [Function' + n + ']'; -- } -- -- // Make RegExps say that they are RegExps -- if (isRegExp(value)) { -- base = ' ' + RegExp.prototype.toString.call(value); -- } -- -- // Make dates with properties first say the date -- if (isDate(value)) { -- base = ' ' + Date.prototype.toUTCString.call(value); -- } -- -- // Make error with message first say the error -- if (isError(value)) { -- base = ' ' + formatError(value); -- } -- -- if (keys.length === 0 && (!array || value.length == 0)) { -- return braces[0] + base + braces[1]; -- } -- -- if (recurseTimes < 0) { -- if (isRegExp(value)) { -- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); -- } else { -- return ctx.stylize('[Object]', 'special'); -- } -- } -- -- ctx.seen.push(value); -- -- var output; -- if (array) { -- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); -- } else { -- output = keys.map(function(key) { -- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); -- }); -- } -- -- ctx.seen.pop(); -- -- return reduceToSingleString(output, base, braces); --} -- -- --function formatPrimitive(ctx, value) { -- if (isUndefined(value)) -- return ctx.stylize('undefined', 'undefined'); -- if (isString(value)) { -- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') -- .replace(/'/g, "\\'") -- .replace(/\\"/g, '"') + '\''; -- return ctx.stylize(simple, 'string'); -- } -- if (isNumber(value)) { -- // Format -0 as '-0'. Strict equality won't distinguish 0 from -0, -- // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 . -- if (value === 0 && 1 / value < 0) -- return ctx.stylize('-0', 'number'); -- return ctx.stylize('' + value, 'number'); -- } -- if (isBoolean(value)) -- return ctx.stylize('' + value, 'boolean'); -- // For some reason typeof null is "object", so special case here. -- if (isNull(value)) -- return ctx.stylize('null', 'null'); --} -- -- --function formatError(value) { -- return '[' + Error.prototype.toString.call(value) + ']'; --} -- -- --function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { -- var output = []; -- for (var i = 0, l = value.length; i < l; ++i) { -- if (hasOwnProperty(value, String(i))) { -- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, -- String(i), true)); -- } else { -- output.push(''); -- } -- } -- keys.forEach(function(key) { -- if (!key.match(/^\d+$/)) { -- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, -- key, true)); -- } -- }); -- return output; --} -- -- --function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { -- var name, str, desc; -- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; -- if (desc.get) { -- if (desc.set) { -- str = ctx.stylize('[Getter/Setter]', 'special'); -- } else { -- str = ctx.stylize('[Getter]', 'special'); -- } -- } else { -- if (desc.set) { -- str = ctx.stylize('[Setter]', 'special'); -- } -- } -- if (!hasOwnProperty(visibleKeys, key)) { -- name = '[' + key + ']'; -- } -- if (!str) { -- if (ctx.seen.indexOf(desc.value) < 0) { -- if (isNull(recurseTimes)) { -- str = formatValue(ctx, desc.value, null); -- } else { -- str = formatValue(ctx, desc.value, recurseTimes - 1); -- } -- if (str.indexOf('\n') > -1) { -- if (array) { -- str = str.split('\n').map(function(line) { -- return ' ' + line; -- }).join('\n').substr(2); -- } else { -- str = '\n' + str.split('\n').map(function(line) { -- return ' ' + line; -- }).join('\n'); -- } -- } -- } else { -- str = ctx.stylize('[Circular]', 'special'); -- } -- } -- if (isUndefined(name)) { -- if (array && key.match(/^\d+$/)) { -- return str; -- } -- name = JSON.stringify('' + key); -- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { -- name = name.substr(1, name.length - 2); -- name = ctx.stylize(name, 'name'); -- } else { -- name = name.replace(/'/g, "\\'") -- .replace(/\\"/g, '"') -- .replace(/(^"|"$)/g, "'"); -- name = ctx.stylize(name, 'string'); -- } -- } -- -- return name + ': ' + str; --} -- -- --function reduceToSingleString(output, base, braces) { -- var numLinesEst = 0; -- var length = output.reduce(function(prev, cur) { -- numLinesEst++; -- if (cur.indexOf('\n') >= 0) numLinesEst++; -- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; -- }, 0); -- -- if (length > 60) { -- return braces[0] + -- (base === '' ? '' : base + '\n ') + -- ' ' + -- output.join(',\n ') + -- ' ' + -- braces[1]; -- } -- -- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; --} -- -- - // NOTE: These type checking functions intentionally don't use `instanceof` - // because it is fragile and can be easily faked with `Object.create()`. - function isArray(ar) { -@@ -522,166 +98,10 @@ function isPrimitive(arg) { - exports.isPrimitive = isPrimitive; - - function isBuffer(arg) { -- return arg instanceof Buffer; -+ return Buffer.isBuffer(arg); - } - exports.isBuffer = isBuffer; - - function objectToString(o) { - return Object.prototype.toString.call(o); --} -- -- --function pad(n) { -- return n < 10 ? '0' + n.toString(10) : n.toString(10); --} -- -- --var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', -- 'Oct', 'Nov', 'Dec']; -- --// 26 Feb 16:19:34 --function timestamp() { -- var d = new Date(); -- var time = [pad(d.getHours()), -- pad(d.getMinutes()), -- pad(d.getSeconds())].join(':'); -- return [d.getDate(), months[d.getMonth()], time].join(' '); --} -- -- --// log is just a thin wrapper to console.log that prepends a timestamp --exports.log = function() { -- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); --}; -- -- --/** -- * Inherit the prototype methods from one constructor into another. -- * -- * The Function.prototype.inherits from lang.js rewritten as a standalone -- * function (not on Function.prototype). NOTE: If this file is to be loaded -- * during bootstrapping this function needs to be rewritten using some native -- * functions as prototype setup using normal JavaScript does not work as -- * expected during bootstrapping (see mirror.js in r114903). -- * -- * @param {function} ctor Constructor function which needs to inherit the -- * prototype. -- * @param {function} superCtor Constructor function to inherit prototype from. -- */ --exports.inherits = function(ctor, superCtor) { -- ctor.super_ = superCtor; -- ctor.prototype = Object.create(superCtor.prototype, { -- constructor: { -- value: ctor, -- enumerable: false, -- writable: true, -- configurable: true -- } -- }); --}; -- --exports._extend = function(origin, add) { -- // Don't do anything if add isn't an object -- if (!add || !isObject(add)) return origin; -- -- var keys = Object.keys(add); -- var i = keys.length; -- while (i--) { -- origin[keys[i]] = add[keys[i]]; -- } -- return origin; --}; -- --function hasOwnProperty(obj, prop) { -- return Object.prototype.hasOwnProperty.call(obj, prop); --} -- -- --// Deprecated old stuff. -- --exports.p = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- console.error(exports.inspect(arguments[i])); -- } --}, 'util.p: Use console.error() instead'); -- -- --exports.exec = exports.deprecate(function() { -- return require('child_process').exec.apply(this, arguments); --}, 'util.exec is now called `child_process.exec`.'); -- -- --exports.print = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stdout.write(String(arguments[i])); -- } --}, 'util.print: Use console.log instead'); -- -- --exports.puts = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stdout.write(arguments[i] + '\n'); -- } --}, 'util.puts: Use console.log instead'); -- -- --exports.debug = exports.deprecate(function(x) { -- process.stderr.write('DEBUG: ' + x + '\n'); --}, 'util.debug: Use console.error instead'); -- -- --exports.error = exports.deprecate(function(x) { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stderr.write(arguments[i] + '\n'); -- } --}, 'util.error: Use console.error instead'); -- -- --exports.pump = exports.deprecate(function(readStream, writeStream, callback) { -- var callbackCalled = false; -- -- function call(a, b, c) { -- if (callback && !callbackCalled) { -- callback(a, b, c); -- callbackCalled = true; -- } -- } -- -- readStream.addListener('data', function(chunk) { -- if (writeStream.write(chunk) === false) readStream.pause(); -- }); -- -- writeStream.addListener('drain', function() { -- readStream.resume(); -- }); -- -- readStream.addListener('end', function() { -- writeStream.end(); -- }); -- -- readStream.addListener('close', function() { -- call(); -- }); -- -- readStream.addListener('error', function(err) { -- writeStream.end(); -- call(err); -- }); -- -- writeStream.addListener('error', function(err) { -- readStream.destroy(); -- call(err); -- }); --}, 'util.pump(): Use readableStream.pipe() instead'); -- -- --var uv; --exports._errnoException = function(err, syscall) { -- if (isUndefined(uv)) uv = process.binding('uv'); -- var errname = uv.errname(err); -- var e = new Error(syscall + ' ' + errname); -- e.code = errname; -- e.errno = errname; -- e.syscall = syscall; -- return e; --}; -+} \ No newline at end of file diff --git a/node_modules/core-util-is/lib/util.js b/node_modules/core-util-is/lib/util.js index ff4c851..6e5a20d 100644 --- a/node_modules/core-util-is/lib/util.js +++ b/node_modules/core-util-is/lib/util.js @@ -100,7 +100,7 @@ function isPrimitive(arg) { } exports.isPrimitive = isPrimitive; -exports.isBuffer = Buffer.isBuffer; +exports.isBuffer = require('buffer').Buffer.isBuffer; function objectToString(o) { return Object.prototype.toString.call(o); diff --git a/node_modules/core-util-is/package.json b/node_modules/core-util-is/package.json index 3368e95..b0c51f5 100644 --- a/node_modules/core-util-is/package.json +++ b/node_modules/core-util-is/package.json @@ -1,8 +1,11 @@ { "name": "core-util-is", - "version": "1.0.2", + "version": "1.0.3", "description": "The `util.is*` functions introduced in Node v0.12.", "main": "lib/util.js", + "files": [ + "lib" + ], "repository": { "type": "git", "url": "git://github.com/isaacs/core-util-is" @@ -24,9 +27,12 @@ "url": "https://github.com/isaacs/core-util-is/issues" }, "scripts": { - "test": "tap test.js" + "test": "tap test.js", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags" }, "devDependencies": { - "tap": "^2.3.0" + "tap": "^15.0.9" } } diff --git a/node_modules/core-util-is/test.js b/node_modules/core-util-is/test.js deleted file mode 100644 index 1a490c6..0000000 --- a/node_modules/core-util-is/test.js +++ /dev/null @@ -1,68 +0,0 @@ -var assert = require('tap'); - -var t = require('./lib/util'); - -assert.equal(t.isArray([]), true); -assert.equal(t.isArray({}), false); - -assert.equal(t.isBoolean(null), false); -assert.equal(t.isBoolean(true), true); -assert.equal(t.isBoolean(false), true); - -assert.equal(t.isNull(null), true); -assert.equal(t.isNull(undefined), false); -assert.equal(t.isNull(false), false); -assert.equal(t.isNull(), false); - -assert.equal(t.isNullOrUndefined(null), true); -assert.equal(t.isNullOrUndefined(undefined), true); -assert.equal(t.isNullOrUndefined(false), false); -assert.equal(t.isNullOrUndefined(), true); - -assert.equal(t.isNumber(null), false); -assert.equal(t.isNumber('1'), false); -assert.equal(t.isNumber(1), true); - -assert.equal(t.isString(null), false); -assert.equal(t.isString('1'), true); -assert.equal(t.isString(1), false); - -assert.equal(t.isSymbol(null), false); -assert.equal(t.isSymbol('1'), false); -assert.equal(t.isSymbol(1), false); -assert.equal(t.isSymbol(Symbol()), true); - -assert.equal(t.isUndefined(null), false); -assert.equal(t.isUndefined(undefined), true); -assert.equal(t.isUndefined(false), false); -assert.equal(t.isUndefined(), true); - -assert.equal(t.isRegExp(null), false); -assert.equal(t.isRegExp('1'), false); -assert.equal(t.isRegExp(new RegExp()), true); - -assert.equal(t.isObject({}), true); -assert.equal(t.isObject([]), true); -assert.equal(t.isObject(new RegExp()), true); -assert.equal(t.isObject(new Date()), true); - -assert.equal(t.isDate(null), false); -assert.equal(t.isDate('1'), false); -assert.equal(t.isDate(new Date()), true); - -assert.equal(t.isError(null), false); -assert.equal(t.isError({ err: true }), false); -assert.equal(t.isError(new Error()), true); - -assert.equal(t.isFunction(null), false); -assert.equal(t.isFunction({ }), false); -assert.equal(t.isFunction(function() {}), true); - -assert.equal(t.isPrimitive(null), true); -assert.equal(t.isPrimitive(''), true); -assert.equal(t.isPrimitive(0), true); -assert.equal(t.isPrimitive(new Date()), false); - -assert.equal(t.isBuffer(null), false); -assert.equal(t.isBuffer({}), false); -assert.equal(t.isBuffer(new Buffer(0)), true); diff --git a/node_modules/depd/History.md b/node_modules/depd/History.md index 507ecb8..cd9ebaa 100644 --- a/node_modules/depd/History.md +++ b/node_modules/depd/History.md @@ -1,3 +1,10 @@ +2.0.0 / 2018-10-26 +================== + + * Drop support for Node.js 0.6 + * Replace internal `eval` usage with `Function` constructor + * Use instance methods on `process` to check for listeners + 1.1.2 / 2018-01-11 ================== diff --git a/node_modules/depd/LICENSE b/node_modules/depd/LICENSE index 84441fb..248de7a 100644 --- a/node_modules/depd/LICENSE +++ b/node_modules/depd/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright (c) 2014-2017 Douglas Christopher Wilson +Copyright (c) 2014-2018 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/node_modules/depd/Readme.md b/node_modules/depd/Readme.md index 7790670..043d1ca 100644 --- a/node_modules/depd/Readme.md +++ b/node_modules/depd/Readme.md @@ -267,14 +267,14 @@ deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') [MIT](LICENSE) -[npm-version-image]: https://img.shields.io/npm/v/depd.svg -[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg -[npm-url]: https://npmjs.org/package/depd -[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux -[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/nodejs-depd/master?label=windows [appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd -[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/dougwilson/nodejs-depd/master [coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master -[node-image]: https://img.shields.io/node/v/depd.svg +[node-image]: https://badgen.net/npm/node/depd [node-url]: https://nodejs.org/en/download/ +[npm-downloads-image]: https://badgen.net/npm/dm/depd +[npm-url]: https://npmjs.org/package/depd +[npm-version-image]: https://badgen.net/npm/v/depd +[travis-image]: https://badgen.net/travis/dougwilson/nodejs-depd/master?label=linux +[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd diff --git a/node_modules/depd/index.js b/node_modules/depd/index.js index d758d3c..1bf2fcf 100644 --- a/node_modules/depd/index.js +++ b/node_modules/depd/index.js @@ -1,6 +1,6 @@ /*! * depd - * Copyright(c) 2014-2017 Douglas Christopher Wilson + * Copyright(c) 2014-2018 Douglas Christopher Wilson * MIT Licensed */ @@ -8,8 +8,6 @@ * Module dependencies. */ -var callSiteToString = require('./lib/compat').callSiteToString -var eventListenerCount = require('./lib/compat').eventListenerCount var relative = require('path').relative /** @@ -92,7 +90,7 @@ function createStackString (stack) { } for (var i = 0; i < stack.length; i++) { - str += '\n at ' + callSiteToString(stack[i]) + str += '\n at ' + stack[i].toString() } return str @@ -128,12 +126,31 @@ function depd (namespace) { return deprecate } +/** + * Determine if event emitter has listeners of a given type. + * + * The way to do this check is done three different ways in Node.js >= 0.8 + * so this consolidates them into a minimal set using instance methods. + * + * @param {EventEmitter} emitter + * @param {string} type + * @returns {boolean} + * @private + */ + +function eehaslisteners (emitter, type) { + var count = typeof emitter.listenerCount !== 'function' + ? emitter.listeners(type).length + : emitter.listenerCount(type) + + return count > 0 +} + /** * Determine if namespace is ignored. */ function isignored (namespace) { - /* istanbul ignore next: tested in a child processs */ if (process.noDeprecation) { // --no-deprecation support return true @@ -150,7 +167,6 @@ function isignored (namespace) { */ function istraced (namespace) { - /* istanbul ignore next: tested in a child processs */ if (process.traceDeprecation) { // --trace-deprecation support return true @@ -167,7 +183,7 @@ function istraced (namespace) { */ function log (message, site) { - var haslisteners = eventListenerCount(process, 'deprecation') !== 0 + var haslisteners = eehaslisteners(process, 'deprecation') // abort early if no destination if (!haslisteners && this._ignored) { @@ -310,7 +326,7 @@ function formatPlain (msg, caller, stack) { // add stack trace if (this._traced) { for (var i = 0; i < stack.length; i++) { - formatted += '\n at ' + callSiteToString(stack[i]) + formatted += '\n at ' + stack[i].toString() } return formatted @@ -335,7 +351,7 @@ function formatColor (msg, caller, stack) { // add stack trace if (this._traced) { for (var i = 0; i < stack.length; i++) { - formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan + formatted += '\n \x1b[36mat ' + stack[i].toString() + '\x1b[39m' // cyan } return formatted @@ -400,18 +416,18 @@ function wrapfunction (fn, message) { } var args = createArgumentsString(fn.length) - var deprecate = this // eslint-disable-line no-unused-vars var stack = getStack() var site = callSiteLocation(stack[1]) site.name = fn.name - // eslint-disable-next-line no-eval - var deprecatedfn = eval('(function (' + args + ') {\n' + + // eslint-disable-next-line no-new-func + var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site', '"use strict"\n' + + 'return function (' + args + ') {' + 'log.call(deprecate, message, site)\n' + 'return fn.apply(this, arguments)\n' + - '})') + '}')(fn, log, this, message, site) return deprecatedfn } diff --git a/node_modules/depd/lib/compat/callsite-tostring.js b/node_modules/depd/lib/compat/callsite-tostring.js deleted file mode 100644 index 73186dc..0000000 --- a/node_modules/depd/lib/compat/callsite-tostring.js +++ /dev/null @@ -1,103 +0,0 @@ -/*! - * depd - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - */ - -module.exports = callSiteToString - -/** - * Format a CallSite file location to a string. - */ - -function callSiteFileLocation (callSite) { - var fileName - var fileLocation = '' - - if (callSite.isNative()) { - fileLocation = 'native' - } else if (callSite.isEval()) { - fileName = callSite.getScriptNameOrSourceURL() - if (!fileName) { - fileLocation = callSite.getEvalOrigin() - } - } else { - fileName = callSite.getFileName() - } - - if (fileName) { - fileLocation += fileName - - var lineNumber = callSite.getLineNumber() - if (lineNumber != null) { - fileLocation += ':' + lineNumber - - var columnNumber = callSite.getColumnNumber() - if (columnNumber) { - fileLocation += ':' + columnNumber - } - } - } - - return fileLocation || 'unknown source' -} - -/** - * Format a CallSite to a string. - */ - -function callSiteToString (callSite) { - var addSuffix = true - var fileLocation = callSiteFileLocation(callSite) - var functionName = callSite.getFunctionName() - var isConstructor = callSite.isConstructor() - var isMethodCall = !(callSite.isToplevel() || isConstructor) - var line = '' - - if (isMethodCall) { - var methodName = callSite.getMethodName() - var typeName = getConstructorName(callSite) - - if (functionName) { - if (typeName && functionName.indexOf(typeName) !== 0) { - line += typeName + '.' - } - - line += functionName - - if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { - line += ' [as ' + methodName + ']' - } - } else { - line += typeName + '.' + (methodName || '') - } - } else if (isConstructor) { - line += 'new ' + (functionName || '') - } else if (functionName) { - line += functionName - } else { - addSuffix = false - line += fileLocation - } - - if (addSuffix) { - line += ' (' + fileLocation + ')' - } - - return line -} - -/** - * Get constructor name of reviver. - */ - -function getConstructorName (obj) { - var receiver = obj.receiver - return (receiver.constructor && receiver.constructor.name) || null -} diff --git a/node_modules/depd/lib/compat/event-listener-count.js b/node_modules/depd/lib/compat/event-listener-count.js deleted file mode 100644 index 3a8925d..0000000 --- a/node_modules/depd/lib/compat/event-listener-count.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * depd - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = eventListenerCount - -/** - * Get the count of listeners on an event emitter of a specific type. - */ - -function eventListenerCount (emitter, type) { - return emitter.listeners(type).length -} diff --git a/node_modules/depd/lib/compat/index.js b/node_modules/depd/lib/compat/index.js deleted file mode 100644 index 955b333..0000000 --- a/node_modules/depd/lib/compat/index.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * depd - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var EventEmitter = require('events').EventEmitter - -/** - * Module exports. - * @public - */ - -lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { - var limit = Error.stackTraceLimit - var obj = {} - var prep = Error.prepareStackTrace - - function prepareObjectStackTrace (obj, stack) { - return stack - } - - Error.prepareStackTrace = prepareObjectStackTrace - Error.stackTraceLimit = 2 - - // capture the stack - Error.captureStackTrace(obj) - - // slice the stack - var stack = obj.stack.slice() - - Error.prepareStackTrace = prep - Error.stackTraceLimit = limit - - return stack[0].toString ? toString : require('./callsite-tostring') -}) - -lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { - return EventEmitter.listenerCount || require('./event-listener-count') -}) - -/** - * Define a lazy property. - */ - -function lazyProperty (obj, prop, getter) { - function get () { - var val = getter() - - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - value: val - }) - - return val - } - - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - get: get - }) -} - -/** - * Call toString() on the obj - */ - -function toString (obj) { - return obj.toString() -} diff --git a/node_modules/depd/package.json b/node_modules/depd/package.json index 5e3c863..3857e19 100644 --- a/node_modules/depd/package.json +++ b/node_modules/depd/package.json @@ -1,7 +1,7 @@ { "name": "depd", "description": "Deprecate all the things", - "version": "1.1.2", + "version": "2.0.0", "author": "Douglas Christopher Wilson ", "license": "MIT", "keywords": [ @@ -13,13 +13,17 @@ "devDependencies": { "benchmark": "2.1.4", "beautify-benchmark": "0.2.4", - "eslint": "3.19.0", - "eslint-config-standard": "7.1.0", + "eslint": "5.7.0", + "eslint-config-standard": "12.0.0", + "eslint-plugin-import": "2.14.0", "eslint-plugin-markdown": "1.0.0-beta.7", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-standard": "4.0.0", "istanbul": "0.4.5", - "mocha": "~1.21.5" + "mocha": "5.2.0", + "safe-buffer": "5.1.2", + "uid-safe": "2.1.5" }, "files": [ "lib/", @@ -29,13 +33,13 @@ "Readme.md" ], "engines": { - "node": ">= 0.6" + "node": ">= 0.8" }, "scripts": { "bench": "node benchmark/index.js", "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/" + "test-ci": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter spec test/ && istanbul report lcovonly text-summary", + "test-cov": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter dot test/ && istanbul report lcov text-summary" } } diff --git a/node_modules/destroy/LICENSE b/node_modules/destroy/LICENSE index a7ae8ee..0e2c35f 100644 --- a/node_modules/destroy/LICENSE +++ b/node_modules/destroy/LICENSE @@ -2,6 +2,7 @@ The MIT License (MIT) Copyright (c) 2014 Jonathan Ong me@jongleberry.com +Copyright (c) 2015-2022 Douglas Christopher Wilson doug@somethingdoug.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/node_modules/destroy/README.md b/node_modules/destroy/README.md index 6474bc3..e7701ae 100644 --- a/node_modules/destroy/README.md +++ b/node_modules/destroy/README.md @@ -1,11 +1,10 @@ -# Destroy +# destroy [![NPM version][npm-image]][npm-url] -[![Build status][travis-image]][travis-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] [![Test coverage][coveralls-image]][coveralls-url] [![License][license-image]][license-url] [![Downloads][downloads-image]][downloads-url] -[![Gittip][gittip-image]][gittip-url] Destroy a stream. @@ -18,17 +17,23 @@ and Node.js bugs. var destroy = require('destroy') ``` -### destroy(stream) +### destroy(stream [, suppress]) -Destroy the given stream. In most cases, this is identical to a simple -`stream.destroy()` call. The rules are as follows for a given stream: +Destroy the given stream, and optionally suppress any future `error` events. + +In most cases, this is identical to a simple `stream.destroy()` call. The rules +are as follows for a given stream: 1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()` and add a listener to the `open` event to call `stream.close()` if it is fired. This is for a Node.js bug that will leak a file descriptor if `.destroy()` is called before `open`. - 2. If the `stream` is not an instance of `Stream`, then nothing happens. - 3. If the `stream` has a `.destroy()` method, then call it. + 2. If the `stream` is an instance of a zlib stream, then call `stream.destroy()` + and close the underlying zlib handle if open, otherwise call `stream.close()`. + This is for consistency across Node.js versions and a Node.js bug that will + leak a native zlib handle. + 3. If the `stream` is not an instance of `Stream`, then nothing happens. + 4. If the `stream` has a `.destroy()` method, then call it. The function returns the `stream` passed in as the argument. @@ -48,13 +53,11 @@ destroy(stream) [npm-url]: https://npmjs.org/package/destroy [github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square [github-url]: https://github.com/stream-utils/destroy/tags -[travis-image]: https://img.shields.io/travis/stream-utils/destroy.svg?style=flat-square -[travis-url]: https://travis-ci.org/stream-utils/destroy [coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square [coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master [license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square [license-url]: LICENSE.md [downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square [downloads-url]: https://npmjs.org/package/destroy -[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square -[gittip-url]: https://www.gittip.com/jonathanong/ +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/stream-utils/destroy/ci/master?label=ci&style=flat-square +[github-actions-ci-url]: https://github.com/stream-utils/destroy/actions/workflows/ci.yml diff --git a/node_modules/destroy/index.js b/node_modules/destroy/index.js index 6da2d26..7fd5c09 100644 --- a/node_modules/destroy/index.js +++ b/node_modules/destroy/index.js @@ -1,6 +1,7 @@ /*! * destroy * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed */ @@ -11,8 +12,10 @@ * @private */ +var EventEmitter = require('events').EventEmitter var ReadStream = require('fs').ReadStream var Stream = require('stream') +var Zlib = require('zlib') /** * Module exports. @@ -22,25 +25,27 @@ var Stream = require('stream') module.exports = destroy /** - * Destroy a stream. + * Destroy the given stream, and optionally suppress any future `error` events. * * @param {object} stream + * @param {boolean} suppress * @public */ -function destroy(stream) { - if (stream instanceof ReadStream) { - return destroyReadStream(stream) - } - - if (!(stream instanceof Stream)) { - return stream - } - - if (typeof stream.destroy === 'function') { +function destroy (stream, suppress) { + if (isFsReadStream(stream)) { + destroyReadStream(stream) + } else if (isZlibStream(stream)) { + destroyZlibStream(stream) + } else if (hasDestroy(stream)) { stream.destroy() } + if (isEventEmitter(stream) && suppress) { + stream.removeAllListeners('error') + stream.addListener('error', noop) + } + return stream } @@ -51,15 +56,144 @@ function destroy(stream) { * @private */ -function destroyReadStream(stream) { +function destroyReadStream (stream) { stream.destroy() if (typeof stream.close === 'function') { // node.js core bug work-around stream.on('open', onOpenClose) } +} - return stream +/** + * Close a Zlib stream. + * + * Zlib streams below Node.js 4.5.5 have a buggy implementation + * of .close() when zlib encountered an error. + * + * @param {object} stream + * @private + */ + +function closeZlibStream (stream) { + if (stream._hadError === true) { + var prop = stream._binding === null + ? '_binding' + : '_handle' + + stream[prop] = { + close: function () { this[prop] = null } + } + } + + stream.close() +} + +/** + * Destroy a Zlib stream. + * + * Zlib streams don't have a destroy function in Node.js 6. On top of that + * simply calling destroy on a zlib stream in Node.js 8+ will result in a + * memory leak. So until that is fixed, we need to call both close AND destroy. + * + * PR to fix memory leak: https://github.com/nodejs/node/pull/23734 + * + * In Node.js 6+8, it's important that destroy is called before close as the + * stream would otherwise emit the error 'zlib binding closed'. + * + * @param {object} stream + * @private + */ + +function destroyZlibStream (stream) { + if (typeof stream.destroy === 'function') { + // node.js core bug work-around + // istanbul ignore if: node.js 0.8 + if (stream._binding) { + // node.js < 0.10.0 + stream.destroy() + if (stream._processing) { + stream._needDrain = true + stream.once('drain', onDrainClearBinding) + } else { + stream._binding.clear() + } + } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) { + // node.js >= 12, ^11.1.0, ^10.15.1 + stream.destroy() + } else if (stream._destroy && typeof stream.close === 'function') { + // node.js 7, 8 + stream.destroyed = true + stream.close() + } else { + // fallback + // istanbul ignore next + stream.destroy() + } + } else if (typeof stream.close === 'function') { + // node.js < 8 fallback + closeZlibStream(stream) + } +} + +/** + * Determine if stream has destroy. + * @private + */ + +function hasDestroy (stream) { + return stream instanceof Stream && + typeof stream.destroy === 'function' +} + +/** + * Determine if val is EventEmitter. + * @private + */ + +function isEventEmitter (val) { + return val instanceof EventEmitter +} + +/** + * Determine if stream is fs.ReadStream stream. + * @private + */ + +function isFsReadStream (stream) { + return stream instanceof ReadStream +} + +/** + * Determine if stream is Zlib stream. + * @private + */ + +function isZlibStream (stream) { + return stream instanceof Zlib.Gzip || + stream instanceof Zlib.Gunzip || + stream instanceof Zlib.Deflate || + stream instanceof Zlib.DeflateRaw || + stream instanceof Zlib.Inflate || + stream instanceof Zlib.InflateRaw || + stream instanceof Zlib.Unzip +} + +/** + * No-op function. + * @private + */ + +function noop () {} + +/** + * On drain handler to clear binding. + * @private + */ + +// istanbul ignore next: node.js 0.8 +function onDrainClearBinding () { + this._binding.clear() } /** @@ -67,7 +201,7 @@ function destroyReadStream(stream) { * @private */ -function onOpenClose() { +function onOpenClose () { if (typeof this.fd === 'number') { // actually close down the fd this.close() diff --git a/node_modules/destroy/package.json b/node_modules/destroy/package.json index 024bff9..c85e438 100644 --- a/node_modules/destroy/package.json +++ b/node_modules/destroy/package.json @@ -1,7 +1,7 @@ { "name": "destroy", "description": "destroy a stream if possible", - "version": "1.0.4", + "version": "1.2.0", "author": { "name": "Jonathan Ong", "email": "me@jongleberry.com", @@ -14,13 +14,24 @@ "license": "MIT", "repository": "stream-utils/destroy", "devDependencies": { - "istanbul": "0.4.2", - "mocha": "2.3.4" + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" }, "scripts": { + "lint": "eslint .", "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" }, "files": [ "index.js", diff --git a/node_modules/ecc-jsbn/LICENSE b/node_modules/ecc-jsbn/LICENSE old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/README.md b/node_modules/ecc-jsbn/README.md old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/index.js b/node_modules/ecc-jsbn/index.js old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/lib/LICENSE-jsbn b/node_modules/ecc-jsbn/lib/LICENSE-jsbn old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/lib/ec.js b/node_modules/ecc-jsbn/lib/ec.js old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/lib/sec.js b/node_modules/ecc-jsbn/lib/sec.js old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/package.json b/node_modules/ecc-jsbn/package.json old mode 100644 new mode 100755 diff --git a/node_modules/ecc-jsbn/test.js b/node_modules/ecc-jsbn/test.js old mode 100644 new mode 100755 diff --git a/node_modules/express/History.md b/node_modules/express/History.md index 9f3f876..4c12ec9 100644 --- a/node_modules/express/History.md +++ b/node_modules/express/History.md @@ -1,3 +1,57 @@ +4.18.1 / 2022-04-29 +=================== + + * Fix hanging on large stack of sync routes + +4.18.0 / 2022-04-25 +=================== + + * Add "root" option to `res.download` + * Allow `options` without `filename` in `res.download` + * Deprecate string and non-integer arguments to `res.status` + * Fix behavior of `null`/`undefined` as `maxAge` in `res.cookie` + * Fix handling very large stacks of sync middleware + * Ignore `Object.prototype` values in settings through `app.set`/`app.get` + * Invoke `default` with same arguments as types in `res.format` + * Support proper 205 responses using `res.send` + * Use `http-errors` for `res.format` error + * deps: body-parser@1.20.0 + - Fix error message for json parse whitespace in `strict` + - Fix internal error when inflated body exceeds limit + - Prevent loss of async hooks context + - Prevent hanging when request already read + - deps: depd@2.0.0 + - deps: http-errors@2.0.0 + - deps: on-finished@2.4.1 + - deps: qs@6.10.3 + - deps: raw-body@2.5.1 + * deps: cookie@0.5.0 + - Add `priority` option + - Fix `expires` option to reject invalid dates + * deps: depd@2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: finalhandler@1.2.0 + - Remove set content headers that break response + - deps: on-finished@2.4.1 + - deps: statuses@2.0.1 + * deps: on-finished@2.4.1 + - Prevent loss of async hooks context + * deps: qs@6.10.3 + * deps: send@0.18.0 + - Fix emitted 416 error missing headers property + - Limit the headers removed for 304 response + - deps: depd@2.0.0 + - deps: destroy@1.2.0 + - deps: http-errors@2.0.0 + - deps: on-finished@2.4.1 + - deps: statuses@2.0.1 + * deps: serve-static@1.15.0 + - deps: send@0.18.0 + * deps: statuses@2.0.1 + - Remove code 306 + - Rename `425 Unordered Collection` to standard `425 Too Early` + 4.17.3 / 2022-02-16 =================== diff --git a/node_modules/express/Readme.md b/node_modules/express/Readme.md index b60d588..720bf38 100644 --- a/node_modules/express/Readme.md +++ b/node_modules/express/Readme.md @@ -2,11 +2,9 @@ Fast, unopinionated, minimalist web framework for [node](http://nodejs.org). - [![NPM Version][npm-image]][npm-url] - [![NPM Downloads][downloads-image]][downloads-url] - [![Linux Build][ci-image]][ci-url] - [![Windows Build][appveyor-image]][appveyor-url] - [![Test Coverage][coveralls-image]][coveralls-url] + [![NPM Version][npm-version-image]][npm-url] + [![NPM Install Size][npm-install-size-image]][npm-install-size-url] + [![NPM Downloads][npm-downloads-image]][npm-downloads-url] ```js const express = require('express') @@ -33,7 +31,7 @@ the [`npm init` command](https://docs.npmjs.com/creating-a-package-json-file). Installation is done using the [`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): -```bash +```console $ npm install express ``` @@ -61,35 +59,31 @@ for more information. **PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/expressjs/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/expressjs/express/wiki/New-features-in-4.x). -### Security Issues - -If you discover a security vulnerability in Express, please see [Security Policies and Procedures](Security.md). - ## Quick Start The quickest way to get started with express is to utilize the executable [`express(1)`](https://github.com/expressjs/generator) to generate an application as shown below: Install the executable. The executable's major version will match Express's: -```bash +```console $ npm install -g express-generator@4 ``` Create the app: -```bash +```console $ express /tmp/foo && cd /tmp/foo ``` Install dependencies: -```bash +```console $ npm install ``` Start the server: -```bash +```console $ npm start ``` @@ -109,7 +103,7 @@ $ npm start To view the examples, clone the Express repo and install the dependencies: -```bash +```console $ git clone git://github.com/expressjs/express.git --depth 1 $ cd express $ npm install @@ -117,22 +111,34 @@ $ npm install Then run whichever example you want: -```bash +```console $ node examples/content-negotiation ``` -## Tests - - To run the test suite, first install the dependencies, then run `npm test`: - -```bash -$ npm install -$ npm test -``` - ## Contributing -[Contributing Guide](Contributing.md) + [![Linux Build][github-actions-ci-image]][github-actions-ci-url] + [![Windows Build][appveyor-image]][appveyor-url] + [![Test Coverage][coveralls-image]][coveralls-url] + +The Express.js project welcomes all constructive contributions. Contributions take many forms, +from code for bug fixes and enhancements, to additions and fixes to documentation, additional +tests, triaging incoming pull requests and issues, and more! + +See the [Contributing Guide](Contributing.md) for more technical details on contributing. + +### Security Issues + +If you discover a security vulnerability in Express, please see [Security Policies and Procedures](Security.md). + +### Running Tests + +To run the test suite, first install the dependencies, then run `npm test`: + +```console +$ npm install +$ npm test +``` ## People @@ -146,13 +152,15 @@ The current lead maintainer is [Douglas Christopher Wilson](https://github.com/d [MIT](LICENSE) -[ci-image]: https://img.shields.io/github/workflow/status/expressjs/express/ci/master.svg?label=linux -[ci-url]: https://github.com/expressjs/express/actions?query=workflow%3Aci -[npm-image]: https://img.shields.io/npm/v/express.svg -[npm-url]: https://npmjs.org/package/express -[downloads-image]: https://img.shields.io/npm/dm/express.svg -[downloads-url]: https://npmcharts.com/compare/express?minimal=true -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/express/master.svg?label=windows +[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/express/master?label=windows [appveyor-url]: https://ci.appveyor.com/project/dougwilson/express -[coveralls-image]: https://img.shields.io/coveralls/expressjs/express/master.svg +[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/express/master [coveralls-url]: https://coveralls.io/r/expressjs/express?branch=master +[github-actions-ci-image]: https://badgen.net/github/checks/expressjs/express/master?label=linux +[github-actions-ci-url]: https://github.com/expressjs/express/actions/workflows/ci.yml +[npm-downloads-image]: https://badgen.net/npm/dm/express +[npm-downloads-url]: https://npmcharts.com/compare/express?minimal=true +[npm-install-size-image]: https://badgen.net/packagephobia/install/express +[npm-install-size-url]: https://packagephobia.com/result?p=express +[npm-url]: https://npmjs.org/package/express +[npm-version-image]: https://badgen.net/npm/v/express diff --git a/node_modules/express/lib/application.js b/node_modules/express/lib/application.js index e65ba58..ebb30b5 100644 --- a/node_modules/express/lib/application.js +++ b/node_modules/express/lib/application.js @@ -29,6 +29,13 @@ var flatten = require('array-flatten'); var merge = require('utils-merge'); var resolve = require('path').resolve; var setPrototypeOf = require('setprototypeof') + +/** + * Module variables. + * @private + */ + +var hasOwnProperty = Object.prototype.hasOwnProperty var slice = Array.prototype.slice; /** @@ -352,7 +359,17 @@ app.param = function param(name, fn) { app.set = function set(setting, val) { if (arguments.length === 1) { // app.get(setting) - return this.settings[setting]; + var settings = this.settings + + while (settings && settings !== Object.prototype) { + if (hasOwnProperty.call(settings, setting)) { + return settings[setting] + } + + settings = Object.getPrototypeOf(settings) + } + + return undefined } debug('set "%s" to %o', setting, val); diff --git a/node_modules/express/lib/response.js b/node_modules/express/lib/response.js index ba02008..fede486 100644 --- a/node_modules/express/lib/response.js +++ b/node_modules/express/lib/response.js @@ -14,6 +14,7 @@ var Buffer = require('safe-buffer').Buffer var contentDisposition = require('content-disposition'); +var createError = require('http-errors') var deprecate = require('depd')('express'); var encodeUrl = require('encodeurl'); var escapeHtml = require('escape-html'); @@ -64,6 +65,9 @@ var charsetRegExp = /;\s*charset\s*=/; */ res.status = function status(code) { + if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) { + deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead') + } this.statusCode = code; return this; }; @@ -135,7 +139,7 @@ res.send = function send(body) { deprecate('res.send(status): Use res.sendStatus(status) instead'); this.statusCode = chunk; - chunk = statuses[chunk] + chunk = statuses.message[chunk] } switch (typeof chunk) { @@ -213,6 +217,13 @@ res.send = function send(body) { chunk = ''; } + // alter headers for 205 + if (this.statusCode === 205) { + this.set('Content-Length', '0') + this.removeHeader('Transfer-Encoding') + chunk = '' + } + if (req.method === 'HEAD') { // skip body for HEAD this.end(); @@ -356,7 +367,7 @@ res.jsonp = function jsonp(obj) { */ res.sendStatus = function sendStatus(statusCode) { - var body = statuses[statusCode] || String(statusCode) + var body = statuses.message[statusCode] || String(statusCode) this.statusCode = statusCode; this.type('txt'); @@ -551,6 +562,13 @@ res.download = function download (path, filename, options, callback) { opts = null } + // support optional filename, where options may be in it's place + if (typeof filename === 'object' && + (typeof options === 'function' || options === undefined)) { + name = null + opts = filename + } + // set Content-Disposition when file is sent var headers = { 'Content-Disposition': contentDisposition(name || path) @@ -572,7 +590,9 @@ res.download = function download (path, filename, options, callback) { opts.headers = headers // Resolve the full path for sendFile - var fullPath = resolve(path); + var fullPath = !opts.root + ? resolve(path) + : path // send file return this.sendFile(fullPath, opts, done) @@ -665,9 +685,8 @@ res.format = function(obj){ var req = this.req; var next = req.next; - var fn = obj.default; - if (fn) delete obj.default; - var keys = Object.keys(obj); + var keys = Object.keys(obj) + .filter(function (v) { return v !== 'default' }) var key = keys.length > 0 ? req.accepts(keys) @@ -678,13 +697,12 @@ res.format = function(obj){ if (key) { this.set('Content-Type', normalizeType(key).value); obj[key](req, this, next); - } else if (fn) { - fn(); + } else if (obj.default) { + obj.default(req, this, next) } else { - var err = new Error('Not Acceptable'); - err.status = err.statusCode = 406; - err.types = normalizeTypes(keys).map(function(o){ return o.value }); - next(err); + next(createError(406, { + types: normalizeTypes(keys).map(function (o) { return o.value }) + })) } return this; @@ -850,9 +868,13 @@ res.cookie = function (name, value, options) { val = 's:' + sign(val, secret); } - if ('maxAge' in opts) { - opts.expires = new Date(Date.now() + opts.maxAge); - opts.maxAge /= 1000; + if (opts.maxAge != null) { + var maxAge = opts.maxAge - 0 + + if (!isNaN(maxAge)) { + opts.expires = new Date(Date.now() + maxAge) + opts.maxAge = Math.floor(maxAge / 1000) + } } if (opts.path == null) { @@ -933,12 +955,12 @@ res.redirect = function redirect(url) { // Support text/{plain,html} by default this.format({ text: function(){ - body = statuses[status] + '. Redirecting to ' + address + body = statuses.message[status] + '. Redirecting to ' + address }, html: function(){ var u = escapeHtml(address); - body = '

' + statuses[status] + '. Redirecting to ' + u + '

' + body = '

' + statuses.message[status] + '. Redirecting to ' + u + '

' }, default: function(){ @@ -1113,7 +1135,7 @@ function sendfile(res, file, options, callback) { * ability to escape characters that can trigger HTML sniffing. * * @param {*} value - * @param {function} replaces + * @param {function} replacer * @param {number} spaces * @param {boolean} escape * @returns {string} diff --git a/node_modules/express/lib/router/index.js b/node_modules/express/lib/router/index.js index fbe94ac..5174c34 100644 --- a/node_modules/express/lib/router/index.js +++ b/node_modules/express/lib/router/index.js @@ -108,8 +108,8 @@ proto.param = function param(name, fn) { var ret; if (name[0] === ':') { - deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.substr(1)) + ', fn) instead'); - name = name.substr(1); + deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead') + name = name.slice(1) } for (var i = 0; i < len; ++i) { @@ -142,6 +142,7 @@ proto.handle = function handle(req, res, out) { var protohost = getProtohost(req.url) || '' var removed = ''; var slashAdded = false; + var sync = 0 var paramcalled = {}; // store options for OPTIONS request @@ -180,14 +181,14 @@ proto.handle = function handle(req, res, out) { // remove added slash if (slashAdded) { - req.url = req.url.substr(1); + req.url = req.url.slice(1) slashAdded = false; } // restore altered req.url if (removed.length !== 0) { req.baseUrl = parentUrl; - req.url = protohost + removed + req.url.substr(protohost.length); + req.url = protohost + removed + req.url.slice(protohost.length) removed = ''; } @@ -203,6 +204,11 @@ proto.handle = function handle(req, res, out) { return; } + // max sync stack + if (++sync > 100) { + return setImmediate(next, err) + } + // get pathname of request var path = getPathname(req); @@ -251,7 +257,6 @@ proto.handle = function handle(req, res, out) { // don't even bother matching route if (!has_method && method !== 'HEAD') { match = false; - continue; } } @@ -274,21 +279,21 @@ proto.handle = function handle(req, res, out) { // this should be done for the layer self.process_params(layer, paramcalled, req, res, function (err) { if (err) { - return next(layerError || err); + next(layerError || err) + } else if (route) { + layer.handle_request(req, res, next) + } else { + trim_prefix(layer, layerError, layerPath, path) } - if (route) { - return layer.handle_request(req, res, next); - } - - trim_prefix(layer, layerError, layerPath, path); + sync = 0 }); } function trim_prefix(layer, layerError, layerPath, path) { if (layerPath.length !== 0) { // Validate path is a prefix match - if (layerPath !== path.substr(0, layerPath.length)) { + if (layerPath !== path.slice(0, layerPath.length)) { next(layerError) return } @@ -301,7 +306,7 @@ proto.handle = function handle(req, res, out) { // middleware (.use stuff) needs to have the path stripped debug('trim prefix (%s) from url %s', layerPath, req.url); removed = layerPath; - req.url = protohost + req.url.substr(protohost.length + removed.length); + req.url = protohost + req.url.slice(protohost.length + removed.length) // Ensure leading slash if (!protohost && req.url[0] !== '/') { @@ -547,10 +552,10 @@ function getProtohost(url) { var pathLength = searchIndex !== -1 ? searchIndex : url.length - var fqdnIndex = url.substr(0, pathLength).indexOf('://') + var fqdnIndex = url.slice(0, pathLength).indexOf('://') return fqdnIndex !== -1 - ? url.substr(0, url.indexOf('/', 3 + fqdnIndex)) + ? url.substring(0, url.indexOf('/', 3 + fqdnIndex)) : undefined } diff --git a/node_modules/express/lib/router/route.js b/node_modules/express/lib/router/route.js index 178df0d..5adaa12 100644 --- a/node_modules/express/lib/router/route.js +++ b/node_modules/express/lib/router/route.js @@ -98,6 +98,8 @@ Route.prototype._options = function _options() { Route.prototype.dispatch = function dispatch(req, res, done) { var idx = 0; var stack = this.stack; + var sync = 0 + if (stack.length === 0) { return done(); } @@ -127,6 +129,11 @@ Route.prototype.dispatch = function dispatch(req, res, done) { return done(err); } + // max sync stack + if (++sync > 100) { + return setImmediate(next, err) + } + if (layer.method && layer.method !== method) { return next(err); } @@ -136,6 +143,8 @@ Route.prototype.dispatch = function dispatch(req, res, done) { } else { layer.handle_request(req, res, next); } + + sync = 0 } }; diff --git a/node_modules/express/lib/utils.js b/node_modules/express/lib/utils.js index 7797b06..799a6a2 100644 --- a/node_modules/express/lib/utils.js +++ b/node_modules/express/lib/utils.js @@ -120,6 +120,7 @@ exports.contentDisposition = deprecate.function(contentDisposition, * also includes `.originalIndex` for stable sorting * * @param {String} str + * @param {Number} index * @return {Object} * @api private */ diff --git a/node_modules/express/lib/view.js b/node_modules/express/lib/view.js index cf101ca..c08ab4d 100644 --- a/node_modules/express/lib/view.js +++ b/node_modules/express/lib/view.js @@ -74,7 +74,7 @@ function View(name, options) { if (!opts.engines[this.ext]) { // load engine - var mod = this.ext.substr(1) + var mod = this.ext.slice(1) debug('require "%s"', mod) // default engine export diff --git a/node_modules/express/package.json b/node_modules/express/package.json index 2fb6eba..f5872a5 100644 --- a/node_modules/express/package.json +++ b/node_modules/express/package.json @@ -1,7 +1,7 @@ { "name": "express", "description": "Fast, unopinionated, minimalist web framework", - "version": "4.17.3", + "version": "4.18.1", "author": "TJ Holowaychuk ", "contributors": [ "Aaron Heckmann ", @@ -30,31 +30,32 @@ "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -64,20 +65,18 @@ "connect-redis": "3.4.2", "cookie-parser": "1.4.6", "cookie-session": "2.0.0", - "ejs": "3.1.6", + "ejs": "3.1.7", "eslint": "7.32.0", "express-session": "1.17.2", "hbs": "4.2.0", "marked": "0.7.0", "method-override": "3.0.0", - "mocha": "9.2.0", + "mocha": "9.2.2", "morgan": "1.10.0", "multiparty": "4.2.3", "nyc": "15.1.0", "pbkdf2-password": "1.2.1", - "resolve-path": "1.4.0", - "should": "13.2.3", - "supertest": "6.2.2", + "supertest": "6.2.3", "vhost": "~3.0.2" }, "engines": { diff --git a/node_modules/fetch-blob/from.js b/node_modules/fetch-blob/from.js index 9eaf8bf..33c4e7b 100644 --- a/node_modules/fetch-blob/from.js +++ b/node_modules/fetch-blob/from.js @@ -65,6 +65,9 @@ class BlobDataItem { this.#start = options.start this.size = options.size this.lastModified = options.lastModified + this.originalSize = options.originalSize === undefined + ? options.size + : options.originalSize } /** @@ -75,16 +78,19 @@ class BlobDataItem { return new BlobDataItem({ path: this.#path, lastModified: this.lastModified, + originalSize: this.originalSize, size: end - start, start: this.#start + start }) } async * stream () { - const { mtimeMs } = await stat(this.#path) - if (mtimeMs > this.lastModified) { + const { mtimeMs, size } = await stat(this.#path) + + if (mtimeMs > this.lastModified || this.originalSize !== size) { throw new DOMException('The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.', 'NotReadableError') } + yield * createReadStream(this.#path, { start: this.#start, end: this.#start + this.size - 1 diff --git a/node_modules/fetch-blob/index.js b/node_modules/fetch-blob/index.js index 2542ac2..8a3809c 100644 --- a/node_modules/fetch-blob/index.js +++ b/node_modules/fetch-blob/index.js @@ -83,8 +83,12 @@ const _Blob = class Blob { part = encoder.encode(`${element}`) } - this.#size += ArrayBuffer.isView(part) ? part.byteLength : part.size - this.#parts.push(part) + const size = ArrayBuffer.isView(part) ? part.byteLength : part.size + // Avoid pushing empty parts into the array to better GC them + if (size) { + this.#size += size + this.#parts.push(part) + } } this.#endings = `${options.endings === undefined ? 'transparent' : options.endings}` diff --git a/node_modules/fetch-blob/package.json b/node_modules/fetch-blob/package.json index cfedf63..cc91aa3 100644 --- a/node_modules/fetch-blob/package.json +++ b/node_modules/fetch-blob/package.json @@ -1,6 +1,6 @@ { "name": "fetch-blob", - "version": "3.1.4", + "version": "3.1.5", "description": "Blob & File implementation in Node.js, originally from node-fetch.", "main": "index.js", "type": "module", diff --git a/node_modules/finalhandler/HISTORY.md b/node_modules/finalhandler/HISTORY.md index 920c35e..ec2d38b 100644 --- a/node_modules/finalhandler/HISTORY.md +++ b/node_modules/finalhandler/HISTORY.md @@ -1,3 +1,11 @@ +1.2.0 / 2022-03-22 +================== + + * Remove set content headers that break response + * deps: on-finished@2.4.1 + * deps: statuses@2.0.1 + - Rename `425 Unordered Collection` to standard `425 Too Early` + 1.1.2 / 2019-05-09 ================== diff --git a/node_modules/finalhandler/LICENSE b/node_modules/finalhandler/LICENSE index fb30982..6022106 100644 --- a/node_modules/finalhandler/LICENSE +++ b/node_modules/finalhandler/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright (c) 2014-2017 Douglas Christopher Wilson +Copyright (c) 2014-2022 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/node_modules/finalhandler/README.md b/node_modules/finalhandler/README.md index 96327f0..81f10ef 100644 --- a/node_modules/finalhandler/README.md +++ b/node_modules/finalhandler/README.md @@ -3,7 +3,7 @@ [![NPM Version][npm-image]][npm-url] [![NPM Downloads][downloads-image]][downloads-url] [![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] [![Test Coverage][coveralls-image]][coveralls-url] Node.js function to invoke as the final step to respond to HTTP request. @@ -20,8 +20,6 @@ $ npm install finalhandler ## API - - ```js var finalhandler = require('finalhandler') ``` @@ -31,7 +29,8 @@ var finalhandler = require('finalhandler') Returns function to be invoked as the final step for the given `req` and `res`. This function is to be invoked as `fn(err)`. If `err` is falsy, the handler will write out a 404 response to the `res`. If it is truthy, an error response will -be written out to the `res`. +be written out to the `res` or `res` will be terminated if a response has already +started. When an error is written, the following information is added to the response: @@ -140,9 +139,9 @@ function logerror (err) { [npm-url]: https://npmjs.org/package/finalhandler [node-image]: https://img.shields.io/node/v/finalhandler.svg [node-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/pillarjs/finalhandler.svg -[travis-url]: https://travis-ci.org/pillarjs/finalhandler [coveralls-image]: https://img.shields.io/coveralls/pillarjs/finalhandler.svg [coveralls-url]: https://coveralls.io/r/pillarjs/finalhandler?branch=master [downloads-image]: https://img.shields.io/npm/dm/finalhandler.svg [downloads-url]: https://npmjs.org/package/finalhandler +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/pillarjs/finalhandler/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/pillarjs/finalhandler?query=workflow%3Aci diff --git a/node_modules/finalhandler/index.js b/node_modules/finalhandler/index.js index 5673507..f628e42 100644 --- a/node_modules/finalhandler/index.js +++ b/node_modules/finalhandler/index.js @@ -1,6 +1,6 @@ /*! * finalhandler - * Copyright(c) 2014-2017 Douglas Christopher Wilson + * Copyright(c) 2014-2022 Douglas Christopher Wilson * MIT Licensed */ @@ -181,7 +181,7 @@ function getErrorMessage (err, status, env) { } } - return msg || statuses[status] + return msg || statuses.message[status] } /** @@ -276,7 +276,12 @@ function send (req, res, status, headers, message) { // response status res.statusCode = status - res.statusMessage = statuses[status] + res.statusMessage = statuses.message[status] + + // remove any content headers + res.removeHeader('Content-Encoding') + res.removeHeader('Content-Language') + res.removeHeader('Content-Range') // response headers setHeaders(res, headers) diff --git a/node_modules/finalhandler/package.json b/node_modules/finalhandler/package.json index 79c8f3e..16bf11e 100644 --- a/node_modules/finalhandler/package.json +++ b/node_modules/finalhandler/package.json @@ -1,7 +1,7 @@ { "name": "finalhandler", "description": "Node.js final http responder", - "version": "1.1.2", + "version": "1.2.0", "author": "Douglas Christopher Wilson ", "license": "MIT", "repository": "pillarjs/finalhandler", @@ -9,37 +9,38 @@ "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "devDependencies": { - "eslint": "5.16.0", - "eslint-config-standard": "12.0.0", - "eslint-plugin-import": "2.17.2", - "eslint-plugin-markdown": "1.0.0", - "eslint-plugin-node": "8.0.1", - "eslint-plugin-promise": "4.1.1", - "eslint-plugin-standard": "4.0.0", - "istanbul": "0.4.5", - "mocha": "6.1.4", + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0", "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "supertest": "4.0.2" + "safe-buffer": "5.2.1", + "supertest": "6.2.2" }, "files": [ "LICENSE", "HISTORY.md", + "SECURITY.md", "index.js" ], "engines": { "node": ">= 0.8" }, "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", + "lint": "eslint .", "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" + "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" } } diff --git a/node_modules/http-errors/HISTORY.md b/node_modules/http-errors/HISTORY.md index fd802a5..7228684 100644 --- a/node_modules/http-errors/HISTORY.md +++ b/node_modules/http-errors/HISTORY.md @@ -1,3 +1,18 @@ +2.0.0 / 2021-12-17 +================== + + * Drop support for Node.js 0.6 + * Remove `I'mateapot` export; use `ImATeapot` instead + * Remove support for status being non-first argument + * Rename `UnorderedCollection` constructor to `TooEarly` + * deps: depd@2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: statuses@2.0.1 + - Fix messaging casing of `418 I'm a Teapot` + - Remove code 306 + - Rename `425 Unordered Collection` to standard `425 Too Early` + 2021-11-14 / 1.8.1 ================== diff --git a/node_modules/http-errors/README.md b/node_modules/http-errors/README.md index 42251a3..a8b7330 100644 --- a/node_modules/http-errors/README.md +++ b/node_modules/http-errors/README.md @@ -14,7 +14,7 @@ This is a [Node.js](https://nodejs.org/en/) module available through the [npm registry](https://www.npmjs.com/). Installation is done using the [`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): -```bash +```console $ npm install http-errors ``` @@ -133,7 +133,7 @@ var err = new createError.NotFound() |422 |UnprocessableEntity | |423 |Locked | |424 |FailedDependency | -|425 |UnorderedCollection | +|425 |TooEarly | |426 |UpgradeRequired | |428 |PreconditionRequired | |429 |TooManyRequests | diff --git a/node_modules/http-errors/index.js b/node_modules/http-errors/index.js index 1a88029..c425f1e 100644 --- a/node_modules/http-errors/index.js +++ b/node_modules/http-errors/index.js @@ -54,24 +54,18 @@ function createError () { var props = {} for (var i = 0; i < arguments.length; i++) { var arg = arguments[i] - if (arg instanceof Error) { + var type = typeof arg + if (type === 'object' && arg instanceof Error) { err = arg status = err.status || err.statusCode || status - continue - } - switch (typeof arg) { - case 'string': - msg = arg - break - case 'number': - status = arg - if (i !== 0) { - deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)') - } - break - case 'object': - props = arg - break + } else if (type === 'number' && i === 0) { + status = arg + } else if (type === 'string') { + msg = arg + } else if (type === 'object') { + props = arg + } else { + throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type) } } @@ -80,7 +74,7 @@ function createError () { } if (typeof status !== 'number' || - (!statuses[status] && (status < 400 || status >= 600))) { + (!statuses.message[status] && (status < 400 || status >= 600))) { status = 500 } @@ -91,7 +85,7 @@ function createError () { // create error err = HttpError ? new HttpError(msg) - : new Error(msg || statuses[status]) + : new Error(msg || statuses.message[status]) Error.captureStackTrace(err, createError) } @@ -135,7 +129,7 @@ function createClientErrorConstructor (HttpError, name, code) { function ClientError (message) { // create the error object - var msg = message != null ? message : statuses[code] + var msg = message != null ? message : statuses.message[code] var err = new Error(msg) // capture a stack trace to the construction point @@ -204,7 +198,7 @@ function createServerErrorConstructor (HttpError, name, code) { function ServerError (message) { // create the error object - var msg = message != null ? message : statuses[code] + var msg = message != null ? message : statuses.message[code] var err = new Error(msg) // capture a stack trace to the construction point @@ -264,7 +258,7 @@ function nameFunc (func, name) { function populateConstructorExports (exports, codes, HttpError) { codes.forEach(function forEachCode (code) { var CodeError - var name = toIdentifier(statuses[code]) + var name = toIdentifier(statuses.message[code]) switch (codeClass(code)) { case 400: @@ -281,10 +275,6 @@ function populateConstructorExports (exports, codes, HttpError) { exports[name] = CodeError } }) - - // backwards-compatibility - exports["I'mateapot"] = deprecate.function(exports.ImATeapot, - '"I\'mateapot"; use "ImATeapot" instead') } /** diff --git a/node_modules/http-errors/package.json b/node_modules/http-errors/package.json index df52507..4cb6d7e 100644 --- a/node_modules/http-errors/package.json +++ b/node_modules/http-errors/package.json @@ -1,7 +1,7 @@ { "name": "http-errors", "description": "Create HTTP error objects", - "version": "1.8.1", + "version": "2.0.0", "author": "Jonathan Ong (http://jongleberry.com)", "contributors": [ "Alan Plum ", @@ -10,10 +10,10 @@ "license": "MIT", "repository": "jshttp/http-errors", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "devDependencies": { @@ -22,19 +22,20 @@ "eslint-plugin-import": "2.25.3", "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.1.1", + "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", "mocha": "9.1.3", "nyc": "15.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" }, "scripts": { "lint": "eslint . && node ./scripts/lint-readme-list.js", "test": "mocha --reporter spec --bail", "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" + "test-cov": "nyc --reporter=html --reporter=text npm test", + "version": "node scripts/version-history.js && git add HISTORY.md" }, "keywords": [ "http", diff --git a/node_modules/jsonwebtoken/node_modules/.bin/semver b/node_modules/jsonwebtoken/node_modules/.bin/semver deleted file mode 100644 index 86cee84..0000000 --- a/node_modules/jsonwebtoken/node_modules/.bin/semver +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../semver/bin/semver" "$@" -else - exec node "$basedir/../semver/bin/semver" "$@" -fi diff --git a/node_modules/jsonwebtoken/node_modules/.bin/semver b/node_modules/jsonwebtoken/node_modules/.bin/semver new file mode 120000 index 0000000..317eb29 --- /dev/null +++ b/node_modules/jsonwebtoken/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/node_modules/jsonwebtoken/node_modules/.bin/semver.cmd b/node_modules/jsonwebtoken/node_modules/.bin/semver.cmd deleted file mode 100644 index 22d9286..0000000 --- a/node_modules/jsonwebtoken/node_modules/.bin/semver.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver" %* diff --git a/node_modules/jsonwebtoken/node_modules/.bin/semver.ps1 b/node_modules/jsonwebtoken/node_modules/.bin/semver.ps1 deleted file mode 100644 index 98c1b09..0000000 --- a/node_modules/jsonwebtoken/node_modules/.bin/semver.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver" $args - } else { - & "$basedir/node$exe" "$basedir/../semver/bin/semver" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../semver/bin/semver" $args - } else { - & "node$exe" "$basedir/../semver/bin/semver" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/jsonwebtoken/node_modules/semver/bin/semver b/node_modules/jsonwebtoken/node_modules/semver/bin/semver old mode 100644 new mode 100755 diff --git a/node_modules/make-dir/node_modules/.bin/semver b/node_modules/make-dir/node_modules/.bin/semver deleted file mode 100644 index 77443e7..0000000 --- a/node_modules/make-dir/node_modules/.bin/semver +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" -else - exec node "$basedir/../semver/bin/semver.js" "$@" -fi diff --git a/node_modules/make-dir/node_modules/.bin/semver b/node_modules/make-dir/node_modules/.bin/semver new file mode 120000 index 0000000..5aaadf4 --- /dev/null +++ b/node_modules/make-dir/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/node_modules/make-dir/node_modules/.bin/semver.cmd b/node_modules/make-dir/node_modules/.bin/semver.cmd deleted file mode 100644 index 9913fa9..0000000 --- a/node_modules/make-dir/node_modules/.bin/semver.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %* diff --git a/node_modules/make-dir/node_modules/.bin/semver.ps1 b/node_modules/make-dir/node_modules/.bin/semver.ps1 deleted file mode 100644 index 314717a..0000000 --- a/node_modules/make-dir/node_modules/.bin/semver.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args - } else { - & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../semver/bin/semver.js" $args - } else { - & "node$exe" "$basedir/../semver/bin/semver.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/make-dir/node_modules/semver/bin/semver.js b/node_modules/make-dir/node_modules/semver/bin/semver.js old mode 100644 new mode 100755 diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md index 68428f1..7436f64 100644 --- a/node_modules/mime-db/HISTORY.md +++ b/node_modules/mime-db/HISTORY.md @@ -1,3 +1,11 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + 1.51.0 / 2021-11-08 =================== diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE index a7ae8ee..0751cb1 100644 --- a/node_modules/mime-db/LICENSE +++ b/node_modules/mime-db/LICENSE @@ -1,22 +1,23 @@ +(The MIT License) -The MIT License (MIT) +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong me@jongleberry.com +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-db/README.md b/node_modules/mime-db/README.md index 41c696a..5a8fcfe 100644 --- a/node_modules/mime-db/README.md +++ b/node_modules/mime-db/README.md @@ -6,7 +6,7 @@ [![Build Status][ci-image]][ci-url] [![Coverage Status][coveralls-image]][coveralls-url] -This is a database of all mime types. +This is a large database of mime types and information about them. It consists of a single, public JSON file and does not include any logic, allowing it to remain as un-opinionated as possible with an API. It aggregates data from the following sources: diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json index a31a6e5..eb9c42c 100644 --- a/node_modules/mime-db/db.json +++ b/node_modules/mime-db/db.json @@ -250,6 +250,10 @@ "application/cfw": { "source": "iana" }, + "application/city+json": { + "source": "iana", + "compressible": true + }, "application/clr": { "source": "iana" }, @@ -293,7 +297,8 @@ }, "application/cpl+xml": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["cpl"] }, "application/csrattrs": { "source": "iana" @@ -328,6 +333,11 @@ "compressible": true, "extensions": ["mpd"] }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, "application/dashdelta": { "source": "iana" }, @@ -868,7 +878,8 @@ }, "application/media-policy-dataset+xml": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["mpf"] }, "application/media_control+xml": { "source": "iana", @@ -1024,6 +1035,9 @@ "application/oauth-authz-req+jwt": { "source": "iana" }, + "application/oblivious-dns-message": { + "source": "iana" + }, "application/ocsp-request": { "source": "iana" }, @@ -1116,7 +1130,8 @@ "extensions": ["pgp"] }, "application/pgp-keys": { - "source": "iana" + "source": "iana", + "extensions": ["asc"] }, "application/pgp-signature": { "source": "iana", @@ -2647,6 +2662,10 @@ "application/vnd.ecip.rlp": { "source": "iana" }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, "application/vnd.ecowin.chart": { "source": "iana", "extensions": ["mag"] @@ -2804,6 +2823,10 @@ "application/vnd.etsi.tsl.der": { "source": "iana" }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, "application/vnd.eudora.data": { "source": "iana" }, @@ -2834,6 +2857,10 @@ "application/vnd.f-secure.mobile": { "source": "iana" }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.fastcopy-disk-image": { "source": "iana" }, @@ -3124,6 +3151,16 @@ "source": "iana", "extensions": ["les"] }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, "application/vnd.hp-hpgl": { "source": "iana", "extensions": ["hpgl"] @@ -3537,6 +3574,10 @@ "source": "iana", "compressible": true }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.maxmind.maxmind-db": { "source": "iana" }, @@ -5157,6 +5198,10 @@ "source": "iana", "compressible": true }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, "application/vnd.symbian.install": { "source": "apache", "extensions": ["sis","sisx"] @@ -5547,7 +5592,8 @@ }, "application/watcherinfo+xml": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["wif"] }, "application/webpush-options+json": { "source": "iana", @@ -6967,10 +7013,12 @@ "extensions": ["apng"] }, "image/avci": { - "source": "iana" + "source": "iana", + "extensions": ["avci"] }, "image/avcs": { - "source": "iana" + "source": "iana", + "extensions": ["avcs"] }, "image/avif": { "source": "iana", diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js index 551031f..ec2be30 100644 --- a/node_modules/mime-db/index.js +++ b/node_modules/mime-db/index.js @@ -1,6 +1,7 @@ /*! * mime-db * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed */ diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json index 6d023ba..32c14b8 100644 --- a/node_modules/mime-db/package.json +++ b/node_modules/mime-db/package.json @@ -1,7 +1,7 @@ { "name": "mime-db", "description": "Media Type Database", - "version": "1.51.0", + "version": "1.52.0", "contributors": [ "Douglas Christopher Wilson ", "Jonathan Ong (http://jongleberry.com)", @@ -25,15 +25,16 @@ "csv-parse": "4.16.3", "eslint": "7.32.0", "eslint-config-standard": "15.0.1", - "eslint-plugin-import": "2.25.2", + "eslint-plugin-import": "2.25.4", "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "5.1.1", "eslint-plugin-standard": "4.1.0", "gnode": "0.1.2", - "mocha": "9.1.3", + "media-typer": "1.1.0", + "mocha": "9.2.1", "nyc": "15.1.0", - "raw-body": "2.4.1", + "raw-body": "2.5.0", "stream-to-array": "2.3.0" }, "files": [ diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md index 7484cf4..c5043b7 100644 --- a/node_modules/mime-types/HISTORY.md +++ b/node_modules/mime-types/HISTORY.md @@ -1,3 +1,12 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + 2.1.34 / 2021-11-08 =================== diff --git a/node_modules/mime-types/README.md b/node_modules/mime-types/README.md index c978ac2..48d2fb4 100644 --- a/node_modules/mime-types/README.md +++ b/node_modules/mime-types/README.md @@ -103,7 +103,7 @@ A map of extensions by content-type. [MIT](LICENSE) [ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci -[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml [coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master [coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master [node-version-image]: https://badgen.net/npm/node/mime-types diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json index f1d282e..bbef696 100644 --- a/node_modules/mime-types/package.json +++ b/node_modules/mime-types/package.json @@ -1,7 +1,7 @@ { "name": "mime-types", "description": "The ultimate javascript content-type utility.", - "version": "2.1.34", + "version": "2.1.35", "contributors": [ "Douglas Christopher Wilson ", "Jeremiah Senkpiel (https://searchbeam.jit.su)", @@ -14,17 +14,17 @@ ], "repository": "jshttp/mime-types", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "devDependencies": { "eslint": "7.32.0", "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.2", + "eslint-plugin-import": "2.25.4", "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.1.1", + "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", - "mocha": "9.1.3", + "mocha": "9.2.2", "nyc": "15.1.0" }, "files": [ diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js old mode 100644 new mode 100755 diff --git a/node_modules/mime/src/build.js b/node_modules/mime/src/build.js old mode 100644 new mode 100755 diff --git a/node_modules/mkdirp/bin/cmd.js b/node_modules/mkdirp/bin/cmd.js old mode 100644 new mode 100755 diff --git a/node_modules/node-addon-api/tools/conversion.js b/node_modules/node-addon-api/tools/conversion.js old mode 100644 new mode 100755 diff --git a/node_modules/node-fetch/@types/index.d.ts b/node_modules/node-fetch/@types/index.d.ts index 9f70902..2a482f6 100644 --- a/node_modules/node-fetch/@types/index.d.ts +++ b/node_modules/node-fetch/@types/index.d.ts @@ -1,7 +1,16 @@ /// /// -import {Agent} from 'http'; +import {RequestOptions} from 'http'; +import {FormData} from 'formdata-polyfill/esm.min.js'; +import { + Blob, + blobFrom, + blobFromSync, + File, + fileFrom, + fileFromSync +} from 'fetch-blob/from.js'; type AbortSignal = { readonly aborted: boolean; @@ -12,6 +21,16 @@ type AbortSignal = { export type HeadersInit = Headers | Record | Iterable | Iterable>; +export { + FormData, + Blob, + blobFrom, + blobFromSync, + File, + fileFrom, + fileFromSync +}; + /** * This Fetch API interface allows you to perform various actions on HTTP request and response headers. * These actions include retrieving, setting, adding to, and removing. @@ -81,7 +100,7 @@ export interface RequestInit { referrerPolicy?: ReferrerPolicy; // Node-fetch extensions to the whatwg/fetch spec - agent?: Agent | ((parsedUrl: URL) => Agent); + agent?: RequestOptions['agent'] | ((parsedUrl: URL) => RequestOptions['agent']); compress?: boolean; counter?: number; follow?: number; @@ -113,9 +132,7 @@ declare class BodyMixin { readonly bodyUsed: boolean; readonly size: number; - /** - * @deprecated Please use 'response.arrayBuffer()' instead of 'response.buffer() - */ + /** @deprecated Use `body.arrayBuffer()` instead. */ buffer(): Promise; arrayBuffer(): Promise; formData(): Promise; diff --git a/node_modules/node-fetch/README.md b/node_modules/node-fetch/README.md index febb494..fce3d8f 100644 --- a/node_modules/node-fetch/README.md +++ b/node_modules/node-fetch/README.md @@ -64,6 +64,7 @@ - [body.bodyUsed](#bodybodyused) - [body.arrayBuffer()](#bodyarraybuffer) - [body.blob()](#bodyblob) + - [body.formData()](#formdata) - [body.json()](#bodyjson) - [body.text()](#bodytext) - [Class: FetchError](#class-fetcherror) @@ -138,13 +139,24 @@ To use `fetch()` without importing it, you can patch the `global` object in node ```js // fetch-polyfill.js -import fetch from 'node-fetch'; +import fetch, { + Blob, + blobFrom, + blobFromSync, + File, + fileFrom, + fileFromSync, + FormData, + Headers, + Request, + Response, +} from 'node-fetch' if (!globalThis.fetch) { - globalThis.fetch = fetch; - globalThis.Headers = Headers; - globalThis.Request = Request; - globalThis.Response = Response; + globalThis.fetch = fetch + globalThis.Headers = Headers + globalThis.Request = Request + globalThis.Response = Response } // index.js @@ -159,7 +171,7 @@ Using an old version of node-fetch? Check out the following files: - [2.x to 3.x upgrade guide](docs/v3-UPGRADE-GUIDE.md) - [1.x to 2.x upgrade guide](docs/v2-UPGRADE-GUIDE.md) -- [Changelog](docs/CHANGELOG.md) +- [Changelog](https://github.com/node-fetch/node-fetch/releases) ## Common Usage @@ -388,36 +400,68 @@ console.log(response.headers.raw()['set-cookie']); ### Post data using a file ```js -import {fileFromSync} from 'fetch-blob/from.js'; -import fetch from 'node-fetch'; +import fetch { + Blob, + blobFrom, + blobFromSync, + File, + fileFrom, + fileFromSync, +} from 'node-fetch' -const blob = fileFromSync('./input.txt', 'text/plain'); +const mimetype = 'text/plain' +const blob = fileFromSync('./input.txt', mimetype) +const url = 'https://httpbin.org/post' -const response = await fetch('https://httpbin.org/post', {method: 'POST', body: blob}); -const data = await response.json(); +const response = await fetch(url, { method: 'POST', body: blob }) +const data = await response.json() console.log(data) ``` -node-fetch also supports any spec-compliant FormData implementations such as [formdata-polyfill](https://www.npmjs.com/package/formdata-polyfill). But any other spec-compliant such as [formdata-node](https://github.com/octet-stream/form-data) works too, but we recommend formdata-polyfill because we use this one internally for decoding entries back to FormData. +node-fetch comes with a spec-compliant [FormData] implementations for posting +multipart/form-data payloads ```js -import fetch from 'node-fetch'; -import {FormData} from 'formdata-polyfill/esm.min.js'; +import fetch, { FormData, File, fileFrom } from 'node-fetch' -// Alternative hack to get the same FormData instance as node-fetch -// const FormData = (await new Response(new URLSearchParams()).formData()).constructor +const httpbin = 'https://httpbin.org/post' +const formData = new FormData() +const binary = new Uint8Array([ 97, 98, 99 ]) +const abc = new File([binary], 'abc.txt', { type: 'text/plain' }) -const form = new FormData(); -form.set('greeting', 'Hello, world!'); +formData.set('greeting', 'Hello, world!') +formData.set('file-upload', abc, 'new name.txt') -const response = await fetch('https://httpbin.org/post', {method: 'POST', body: form}); -const data = await response.json(); +const response = await fetch(httpbin, { method: 'POST', body: formData }) +const data = await response.json() -console.log(data); +console.log(data) ``` -node-fetch also support form-data but it's now discouraged due to not being spec-compliant and needs workarounds to function - which we hope to remove one day +If you for some reason need to post a stream coming from any arbitrary place, +then you can append a [Blob] or a [File] look-a-like item. + +The minium requirement is that it has: +1. A `Symbol.toStringTag` getter or property that is either `Blob` or `File` +2. A known size. +3. And either a `stream()` method or a `arrayBuffer()` method that returns a ArrayBuffer. + +The `stream()` must return any async iterable object as long as it yields Uint8Array (or Buffer) +so Node.Readable streams and whatwg streams works just fine. + +```js +formData.append('upload', { + [Symbol.toStringTag]: 'Blob', + size: 3, + *stream() { + yield new Uint8Array([97, 98, 99]) + }, + arrayBuffer() { + return new Uint8Array([97, 98, 99]).buffer + } +}, 'abc.txt') +``` ### Request cancellation with AbortSignal @@ -426,7 +470,7 @@ You may cancel requests with `AbortController`. A suggested implementation is [` An example of timing out a request after 150ms could be achieved as the following: ```js -import fetch from 'node-fetch'; +import fetch, { AbortError } from 'node-fetch'; // AbortController was added in node v14.17.0 globally const AbortController = globalThis.AbortController || await import('abort-controller') @@ -440,7 +484,7 @@ try { const response = await fetch('https://example.com', {signal: controller.signal}); const data = await response.json(); } catch (error) { - if (error instanceof fetch.AbortError) { + if (error instanceof AbortError) { console.log('request was aborted'); } } finally { @@ -493,7 +537,7 @@ If no values are set, the following request headers will be sent automatically: | Header | Value | | ------------------- | ------------------------------------------------------ | -| `Accept-Encoding` | `gzip,deflate,br` _(when `options.compress === true`)_ | +| `Accept-Encoding` | `gzip, deflate, br` (when `options.compress === true`) | | `Accept` | `*/*` | | `Connection` | `close` _(when no `options.agent` is present)_ | | `Content-Length` | _(automatically calculated, if possible)_ | @@ -550,7 +594,7 @@ The recommended way to fix this problem is to resolve cloned response in paralle import fetch from 'node-fetch'; const response = await fetch('https://example.com'); -const r1 = await response.clone(); +const r1 = response.clone(); const results = await Promise.all([response.json(), r1.text()]); @@ -625,7 +669,7 @@ See [options](#fetch-options) for exact meaning of these extensions. _(spec-compliant)_ - `input` A string representing a URL, or another `Request` (which will be cloned) -- `options` [Options][#fetch-options] for the HTTP(S) request +- `options` [Options](#fetch-options) for the HTTP(S) request Constructs a new `Request` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request). @@ -689,19 +733,17 @@ Construct a new `Headers` object. `init` can be either `null`, a `Headers` objec import {Headers} from 'node-fetch'; const meta = { - 'Content-Type': 'text/xml', - 'Breaking-Bad': '<3' + 'Content-Type': 'text/xml' }; const headers = new Headers(meta); // The above is equivalent to -const meta = [['Content-Type', 'text/xml'], ['Breaking-Bad', '<3']]; +const meta = [['Content-Type', 'text/xml']]; const headers = new Headers(meta); // You can in fact use any iterable objects, like a Map or even another Headers const meta = new Map(); meta.set('Content-Type', 'text/xml'); -meta.set('Breaking-Bad', '<3'); const headers = new Headers(meta); const copyOfHeaders = new Headers(headers); ``` @@ -738,11 +780,41 @@ A boolean property for if this body has been consumed. Per the specs, a consumed #### body.text() -_(spec-compliant)_ +`fetch` comes with methods to parse `multipart/form-data` payloads as well as +`x-www-form-urlencoded` bodies using `.formData()` this comes from the idea that +Service Worker can intercept such messages before it's sent to the server to +alter them. This is useful for anybody building a server so you can use it to +parse & consume payloads. -- Returns: `Promise` +
+Code example -Consume the body and return a promise that will resolve to one of these formats. +```js +import http from 'node:http' +import { Response } from 'node-fetch' + +http.createServer(async function (req, res) { + const formData = await new Response(req, { + headers: req.headers // Pass along the boundary value + }).formData() + const allFields = [...formData] + + const file = formData.get('uploaded-files') + const arrayBuffer = await file.arrayBuffer() + const text = await file.text() + const whatwgReadableStream = file.stream() + + // other was to consume the request could be to do: + const json = await new Response(req).json() + const text = await new Response(req).text() + const arrayBuffer = await new Response(req).arrayBuffer() + const blob = await new Response(req, { + headers: req.headers // So that `type` inherits `Content-Type` + }.blob() +}) +``` + +
@@ -794,3 +866,6 @@ Thanks to [github/fetch](https://github.com/github/fetch) for providing a solid [node-readable]: https://nodejs.org/api/stream.html#stream_readable_streams [mdn-headers]: https://developer.mozilla.org/en-US/docs/Web/API/Headers [error-handling.md]: https://github.com/node-fetch/node-fetch/blob/master/docs/ERROR-HANDLING.md +[FormData]: https://developer.mozilla.org/en-US/docs/Web/API/FormData +[Blob]: https://developer.mozilla.org/en-US/docs/Web/API/Blob +[File]: https://developer.mozilla.org/en-US/docs/Web/API/File diff --git a/node_modules/node-fetch/package.json b/node_modules/node-fetch/package.json index c5217d7..73bbbfc 100644 --- a/node_modules/node-fetch/package.json +++ b/node_modules/node-fetch/package.json @@ -1,6 +1,6 @@ { "name": "node-fetch", - "version": "3.2.0", + "version": "3.2.5", "description": "A light-weight module that brings Fetch API to node.js", "main": "./src/index.js", "sideEffects": false, diff --git a/node_modules/node-fetch/src/body.js b/node_modules/node-fetch/src/body.js index b0fe16b..714e27e 100644 --- a/node_modules/node-fetch/src/body.js +++ b/node_modules/node-fetch/src/body.js @@ -145,8 +145,8 @@ export default class Body { * @return Promise */ async json() { - const buffer = await consumeBody(this); - return JSON.parse(buffer.toString()); + const text = await this.text(); + return JSON.parse(text); } /** @@ -156,7 +156,7 @@ export default class Body { */ async text() { const buffer = await consumeBody(this); - return buffer.toString(); + return new TextDecoder().decode(buffer); } /** diff --git a/node_modules/node-fetch/src/index.js b/node_modules/node-fetch/src/index.js index f5f3984..513b052 100644 --- a/node_modules/node-fetch/src/index.js +++ b/node_modules/node-fetch/src/index.js @@ -387,13 +387,7 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) { } }; - socket.prependListener('close', onSocketClose); - - request.on('abort', () => { - socket.removeListener('close', onSocketClose); - }); - - socket.on('data', buf => { + const onData = buf => { properLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0; // Sometimes final 0-length chunk and end of message code are in separate packets @@ -405,6 +399,14 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) { } previousChunk = buf; + }; + + socket.prependListener('close', onSocketClose); + socket.on('data', onData); + + request.on('close', () => { + socket.removeListener('close', onSocketClose); + socket.removeListener('data', onData); }); }); } diff --git a/node_modules/node-fetch/src/request.js b/node_modules/node-fetch/src/request.js index 76d7576..38f33df 100644 --- a/node_modules/node-fetch/src/request.js +++ b/node_modules/node-fetch/src/request.js @@ -57,11 +57,13 @@ export default class Request extends Body { } if (parsedURL.username !== '' || parsedURL.password !== '') { - throw new TypeError(`${parsedURL} is an url with embedded credentails.`); + throw new TypeError(`${parsedURL} is an url with embedded credentials.`); } let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); + if (/^(delete|get|head|options|post|put)$/i.test(method)) { + method = method.toUpperCase(); + } if ('data' in init) { doBadDataWarn(); @@ -278,7 +280,7 @@ export const getNodeRequestOptions = request => { // HTTP-network-or-cache fetch step 2.15 if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate,br'); + headers.set('Accept-Encoding', 'gzip, deflate, br'); } let {agent} = request; diff --git a/node_modules/nopt/bin/nopt.js b/node_modules/nopt/bin/nopt.js old mode 100644 new mode 100755 diff --git a/node_modules/on-finished/HISTORY.md b/node_modules/on-finished/HISTORY.md index 98ff0e9..1917595 100644 --- a/node_modules/on-finished/HISTORY.md +++ b/node_modules/on-finished/HISTORY.md @@ -1,3 +1,13 @@ +2.4.1 / 2022-02-22 +================== + + * Fix error on early async hooks implementations + +2.4.0 / 2022-02-21 +================== + + * Prevent loss of async hooks context + 2.3.0 / 2015-05-26 ================== diff --git a/node_modules/on-finished/README.md b/node_modules/on-finished/README.md index a0e1157..8973cde 100644 --- a/node_modules/on-finished/README.md +++ b/node_modules/on-finished/README.md @@ -1,15 +1,19 @@ # on-finished -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] Execute a callback when a HTTP request closes, finishes, or errors. ## Install +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + ```sh $ npm install on-finished ``` @@ -32,10 +36,12 @@ with the response, like open files. Listener is invoked as `listener(err, res)`. + + ```js onFinished(res, function (err, res) { // clean up open fds, etc. - // err contains the error is request error'd + // err contains the error if request error'd }) ``` @@ -51,11 +57,13 @@ after reading the data. Listener is invoked as `listener(err, req)`. + + ```js var data = '' req.setEncoding('utf8') -res.on('data', function (str) { +req.on('data', function (str) { data += str }) @@ -97,7 +105,7 @@ interface**. This means if the `CONNECT` request contains a request entity, the request will be considered "finished" even before it has been read. There is no such thing as a response object to a `CONNECT` request in -Node.js, so there is no support for for one. +Node.js, so there is no support for one. ### HTTP Upgrade request @@ -117,7 +125,7 @@ entity, the request will be considered "finished" even before it has been read. There is no such thing as a response object to a `Upgrade` request in -Node.js, so there is no support for for one. +Node.js, so there is no support for one. ## Example @@ -126,13 +134,14 @@ once the response finishes. ```js var destroy = require('destroy') +var fs = require('fs') var http = require('http') var onFinished = require('on-finished') -http.createServer(function onRequest(req, res) { +http.createServer(function onRequest (req, res) { var stream = fs.createReadStream('package.json') stream.pipe(res) - onFinished(res, function (err) { + onFinished(res, function () { destroy(stream) }) }) @@ -142,13 +151,12 @@ http.createServer(function onRequest(req, res) { [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/on-finished.svg -[npm-url]: https://npmjs.org/package/on-finished -[node-version-image]: https://img.shields.io/node/v/on-finished.svg -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/jshttp/on-finished/master.svg -[travis-url]: https://travis-ci.org/jshttp/on-finished -[coveralls-image]: https://img.shields.io/coveralls/jshttp/on-finished/master.svg +[ci-image]: https://badgen.net/github/checks/jshttp/on-finished/master?label=ci +[ci-url]: https://github.com/jshttp/on-finished/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-finished/master [coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master -[downloads-image]: https://img.shields.io/npm/dm/on-finished.svg -[downloads-url]: https://npmjs.org/package/on-finished +[node-image]: https://badgen.net/npm/node/on-finished +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/on-finished +[npm-url]: https://npmjs.org/package/on-finished +[npm-version-image]: https://badgen.net/npm/v/on-finished diff --git a/node_modules/on-finished/index.js b/node_modules/on-finished/index.js index 9abd98f..e68df7b 100644 --- a/node_modules/on-finished/index.js +++ b/node_modules/on-finished/index.js @@ -20,6 +20,7 @@ module.exports.isFinished = isFinished * @private */ +var asyncHooks = tryRequireAsyncHooks() var first = require('ee-first') /** @@ -30,7 +31,7 @@ var first = require('ee-first') /* istanbul ignore next */ var defer = typeof setImmediate === 'function' ? setImmediate - : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) } + : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) } /** * Invoke callback when the response has finished, useful for @@ -42,14 +43,14 @@ var defer = typeof setImmediate === 'function' * @public */ -function onFinished(msg, listener) { +function onFinished (msg, listener) { if (isFinished(msg) !== false) { defer(listener, null, msg) return msg } // attach the listener to the message - attachListener(msg, listener) + attachListener(msg, wrap(listener)) return msg } @@ -62,7 +63,7 @@ function onFinished(msg, listener) { * @public */ -function isFinished(msg) { +function isFinished (msg) { var socket = msg.socket if (typeof msg.finished === 'boolean') { @@ -87,12 +88,12 @@ function isFinished(msg) { * @private */ -function attachFinishedListener(msg, callback) { +function attachFinishedListener (msg, callback) { var eeMsg var eeSocket var finished = false - function onFinish(error) { + function onFinish (error) { eeMsg.cancel() eeSocket.cancel() @@ -103,7 +104,7 @@ function attachFinishedListener(msg, callback) { // finished on first message event eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) - function onSocket(socket) { + function onSocket (socket) { // remove listener msg.removeListener('socket', onSocket) @@ -124,7 +125,7 @@ function attachFinishedListener(msg, callback) { msg.on('socket', onSocket) if (msg.socket === undefined) { - // node.js 0.8 patch + // istanbul ignore next: node.js 0.8 patch patchAssignSocket(msg, onSocket) } } @@ -137,7 +138,7 @@ function attachFinishedListener(msg, callback) { * @private */ -function attachListener(msg, listener) { +function attachListener (msg, listener) { var attached = msg.__onFinished // create a private single listener with queue @@ -157,8 +158,8 @@ function attachListener(msg, listener) { * @private */ -function createListener(msg) { - function listener(err) { +function createListener (msg) { + function listener (err) { if (msg.__onFinished === listener) msg.__onFinished = null if (!listener.queue) return @@ -183,14 +184,51 @@ function createListener(msg) { * @private */ -function patchAssignSocket(res, callback) { +// istanbul ignore next: node.js 0.8 patch +function patchAssignSocket (res, callback) { var assignSocket = res.assignSocket if (typeof assignSocket !== 'function') return // res.on('socket', callback) is broken in 0.8 - res.assignSocket = function _assignSocket(socket) { + res.assignSocket = function _assignSocket (socket) { assignSocket.call(this, socket) callback(socket) } } + +/** + * Try to require async_hooks + * @private + */ + +function tryRequireAsyncHooks () { + try { + return require('async_hooks') + } catch (e) { + return {} + } +} + +/** + * Wrap function with async resource, if possible. + * AsyncResource.bind static method backported. + * @private + */ + +function wrap (fn) { + var res + + // create anonymous resource + if (asyncHooks.AsyncResource) { + res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn') + } + + // incompatible node.js + if (!res || !res.runInAsyncScope) { + return fn + } + + // return bound function + return res.runInAsyncScope.bind(res, fn, null) +} diff --git a/node_modules/on-finished/package.json b/node_modules/on-finished/package.json index b9df1bd..644cd81 100644 --- a/node_modules/on-finished/package.json +++ b/node_modules/on-finished/package.json @@ -1,7 +1,7 @@ { "name": "on-finished", "description": "Execute a callback when a request closes, finishes, or errors", - "version": "2.3.0", + "version": "2.4.1", "contributors": [ "Douglas Christopher Wilson ", "Jonathan Ong (http://jongleberry.com)" @@ -12,8 +12,15 @@ "ee-first": "1.1.1" }, "devDependencies": { - "istanbul": "0.3.9", - "mocha": "2.2.5" + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0" }, "engines": { "node": ">= 0.8" @@ -24,8 +31,9 @@ "index.js" ], "scripts": { + "lint": "eslint .", "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" } } diff --git a/node_modules/performance-now/test/scripts/delayed-call.coffee b/node_modules/performance-now/test/scripts/delayed-call.coffee old mode 100644 new mode 100755 diff --git a/node_modules/performance-now/test/scripts/delayed-require.coffee b/node_modules/performance-now/test/scripts/delayed-require.coffee old mode 100644 new mode 100755 diff --git a/node_modules/performance-now/test/scripts/difference.coffee b/node_modules/performance-now/test/scripts/difference.coffee old mode 100644 new mode 100755 diff --git a/node_modules/performance-now/test/scripts/initial-value.coffee b/node_modules/performance-now/test/scripts/initial-value.coffee old mode 100644 new mode 100755 diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md index 1283465..c6b2915 100644 --- a/node_modules/qs/CHANGELOG.md +++ b/node_modules/qs/CHANGELOG.md @@ -1,14 +1,31 @@ -## **6.9.7** +## **6.10.3** - [Fix] `parse`: ignore `__proto__` keys (#428) -- [Fix] `stringify`: avoid encoding arrayformat comma when `encodeValuesOnly = true` (#424) - [Robustness] `stringify`: avoid relying on a global `undefined` (#427) +- [actions] reuse common workflows +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `tape` + +## **6.10.2** +- [Fix] `stringify`: actually fix cyclic references (#426) +- [Fix] `stringify`: avoid encoding arrayformat comma when `encodeValuesOnly = true` (#424) - [readme] remove travis badge; add github actions/codecov badges; update URLs - [Docs] add note and links for coercing primitive values (#408) +- [actions] update codecov uploader +- [actions] update workflows - [Tests] clean up stringify tests slightly +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `safe-publish-latest`, `tape` + +## **6.10.1** +- [Fix] `stringify`: avoid exception on repeated object values (#402) + +## **6.10.0** +- [New] `stringify`: throw on cycles, instead of an infinite loop (#395, #394, #393) +- [New] `parse`: add `allowSparse` option for collapsing arrays with missing indices (#312) - [meta] fix README.md (#399) -- Revert "[meta] ignore eclint transitive audit warning" -- [actions] backport actions from main -- [Dev Deps] backport updates from main +- [meta] only run `npm run dist` in publish, not install +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-symbols`, `tape` +- [Tests] fix tests on node v0.6 +- [Tests] use `ljharb/actions/node/install` instead of `ljharb/actions/node/run` +- [Tests] Revert "[meta] ignore eclint transitive audit warning" ## **6.9.6** - [Fix] restore `dist` dir; mistakenly removed in d4f6c32 diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md index f64de3d..0126380 100644 --- a/node_modules/qs/README.md +++ b/node_modules/qs/README.md @@ -228,6 +228,13 @@ var noSparse = qs.parse('a[1]=b&a[15]=c'); assert.deepEqual(noSparse, { a: ['b', 'c'] }); ``` +You may also use `allowSparse` option to parse sparse arrays: + +```javascript +var sparseArray = qs.parse('a[1]=2&a[3]=5', { allowSparse: true }); +assert.deepEqual(sparseArray, { a: [, '2', , '5'] }); +``` + Note that an empty string is also a value, and will be preserved: ```javascript diff --git a/node_modules/qs/dist/qs.js b/node_modules/qs/dist/qs.js index ca3d394..94baf8f 100644 --- a/node_modules/qs/dist/qs.js +++ b/node_modules/qs/dist/qs.js @@ -47,6 +47,7 @@ var isArray = Array.isArray; var defaults = { allowDots: false, allowPrototypes: false, + allowSparse: false, arrayLimit: 20, charset: 'utf-8', charsetSentinel: false, @@ -256,6 +257,7 @@ var normalizeParseOptions = function normalizeParseOptions(opts) { return { allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, charset: charset, charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, @@ -292,12 +294,17 @@ module.exports = function (str, opts) { obj = utils.merge(obj, newObj, options); } + if (options.allowSparse === true) { + return obj; + } + return utils.compact(obj); }; },{"./utils":5}],4:[function(require,module,exports){ 'use strict'; +var getSideChannel = require('side-channel'); var utils = require('./utils'); var formats = require('./formats'); var has = Object.prototype.hasOwnProperty; @@ -353,6 +360,8 @@ var isNonNullishPrimitive = function isNonNullishPrimitive(v) { || typeof v === 'bigint'; }; +var sentinel = {}; + var stringify = function stringify( object, prefix, @@ -367,9 +376,30 @@ var stringify = function stringify( format, formatter, encodeValuesOnly, - charset + charset, + sideChannel ) { var obj = object; + + var tmpSc = sideChannel; + var step = 0; + var findFlag = false; + while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { + // Where object last appeared in the ref tree + var pos = tmpSc.get(object); + step += 1; + if (typeof pos !== 'undefined') { + if (pos === step) { + throw new RangeError('Cyclic object value'); + } else { + findFlag = true; // Break while + } + } + if (typeof tmpSc.get(sentinel) === 'undefined') { + step = 0; + } + } + if (typeof filter === 'function') { obj = filter(prefix, obj); } else if (obj instanceof Date) { @@ -436,6 +466,9 @@ var stringify = function stringify( ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix : prefix + (allowDots ? '.' + key : '[' + key + ']'); + sideChannel.set(object, step); + var valueSideChannel = getSideChannel(); + valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify( value, keyPrefix, @@ -450,7 +483,8 @@ var stringify = function stringify( format, formatter, encodeValuesOnly, - charset + charset, + valueSideChannel )); } @@ -544,6 +578,7 @@ module.exports = function (object, opts) { objKeys.sort(options.sort); } + var sideChannel = getSideChannel(); for (var i = 0; i < objKeys.length; ++i) { var key = objKeys[i]; @@ -564,7 +599,8 @@ module.exports = function (object, opts) { options.format, options.formatter, options.encodeValuesOnly, - options.charset + options.charset, + sideChannel )); } @@ -584,7 +620,7 @@ module.exports = function (object, opts) { return joined.length > 0 ? prefix + joined : ''; }; -},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ +},{"./formats":1,"./utils":5,"side-channel":16}],5:[function(require,module,exports){ 'use strict'; var formats = require('./formats'); @@ -838,5 +874,1171 @@ module.exports = { merge: merge }; -},{"./formats":1}]},{},[2])(2) +},{"./formats":1}],6:[function(require,module,exports){ + +},{}],7:[function(require,module,exports){ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var callBind = require('./'); + +var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); + +module.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBind(intrinsic); + } + return intrinsic; +}; + +},{"./":8,"get-intrinsic":11}],8:[function(require,module,exports){ +'use strict'; + +var bind = require('function-bind'); +var GetIntrinsic = require('get-intrinsic'); + +var $apply = GetIntrinsic('%Function.prototype.apply%'); +var $call = GetIntrinsic('%Function.prototype.call%'); +var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); + +var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); +var $max = GetIntrinsic('%Math.max%'); + +if ($defineProperty) { + try { + $defineProperty({}, 'a', { value: 1 }); + } catch (e) { + // IE 8 has a broken defineProperty + $defineProperty = null; + } +} + +module.exports = function callBind(originalFunction) { + var func = $reflectApply(bind, $call, arguments); + if ($gOPD && $defineProperty) { + var desc = $gOPD(func, 'length'); + if (desc.configurable) { + // original length, plus the receiver, minus any additional arguments (after the receiver) + $defineProperty( + func, + 'length', + { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) } + ); + } + } + return func; +}; + +var applyBind = function applyBind() { + return $reflectApply(bind, $apply, arguments); +}; + +if ($defineProperty) { + $defineProperty(module.exports, 'apply', { value: applyBind }); +} else { + module.exports.apply = applyBind; +} + +},{"function-bind":10,"get-intrinsic":11}],9:[function(require,module,exports){ +'use strict'; + +/* eslint no-invalid-this: 1 */ + +var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; +var slice = Array.prototype.slice; +var toStr = Object.prototype.toString; +var funcType = '[object Function]'; + +module.exports = function bind(that) { + var target = this; + if (typeof target !== 'function' || toStr.call(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slice.call(arguments, 1); + + var bound; + var binder = function () { + if (this instanceof bound) { + var result = target.apply( + this, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return this; + } else { + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + } + }; + + var boundLength = Math.max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0; i < boundLength; i++) { + boundArgs.push('$' + i); + } + + bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder); + + if (target.prototype) { + var Empty = function Empty() {}; + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + + return bound; +}; + +},{}],10:[function(require,module,exports){ +'use strict'; + +var implementation = require('./implementation'); + +module.exports = Function.prototype.bind || implementation; + +},{"./implementation":9}],11:[function(require,module,exports){ +'use strict'; + +var undefined; + +var $SyntaxError = SyntaxError; +var $Function = Function; +var $TypeError = TypeError; + +// eslint-disable-next-line consistent-return +var getEvalledConstructor = function (expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); + } catch (e) {} +}; + +var $gOPD = Object.getOwnPropertyDescriptor; +if ($gOPD) { + try { + $gOPD({}, ''); + } catch (e) { + $gOPD = null; // this is IE 8, which has a broken gOPD + } +} + +var throwTypeError = function () { + throw new $TypeError(); +}; +var ThrowTypeError = $gOPD + ? (function () { + try { + // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties + arguments.callee; // IE 8 does not throw here + return throwTypeError; + } catch (calleeThrows) { + try { + // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') + return $gOPD(arguments, 'callee').get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }()) + : throwTypeError; + +var hasSymbols = require('has-symbols')(); + +var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto + +var needsEval = {}; + +var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array); + +var INTRINSICS = { + '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, + '%Array%': Array, + '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined, + '%AsyncFromSyncIteratorPrototype%': undefined, + '%AsyncFunction%': needsEval, + '%AsyncGenerator%': needsEval, + '%AsyncGeneratorFunction%': needsEval, + '%AsyncIteratorPrototype%': needsEval, + '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, + '%Boolean%': Boolean, + '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '%Date%': Date, + '%decodeURI%': decodeURI, + '%decodeURIComponent%': decodeURIComponent, + '%encodeURI%': encodeURI, + '%encodeURIComponent%': encodeURIComponent, + '%Error%': Error, + '%eval%': eval, // eslint-disable-line no-eval + '%EvalError%': EvalError, + '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, + '%Function%': $Function, + '%GeneratorFunction%': needsEval, + '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '%isFinite%': isFinite, + '%isNaN%': isNaN, + '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined, + '%JSON%': typeof JSON === 'object' ? JSON : undefined, + '%Map%': typeof Map === 'undefined' ? undefined : Map, + '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()), + '%Math%': Math, + '%Number%': Number, + '%Object%': Object, + '%parseFloat%': parseFloat, + '%parseInt%': parseInt, + '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '%RangeError%': RangeError, + '%ReferenceError%': ReferenceError, + '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '%RegExp%': RegExp, + '%Set%': typeof Set === 'undefined' ? undefined : Set, + '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()), + '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '%String%': String, + '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined, + '%Symbol%': hasSymbols ? Symbol : undefined, + '%SyntaxError%': $SyntaxError, + '%ThrowTypeError%': ThrowTypeError, + '%TypedArray%': TypedArray, + '%TypeError%': $TypeError, + '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '%URIError%': URIError, + '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, + '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet +}; + +var doEval = function doEval(name) { + var value; + if (name === '%AsyncFunction%') { + value = getEvalledConstructor('async function () {}'); + } else if (name === '%GeneratorFunction%') { + value = getEvalledConstructor('function* () {}'); + } else if (name === '%AsyncGeneratorFunction%') { + value = getEvalledConstructor('async function* () {}'); + } else if (name === '%AsyncGenerator%') { + var fn = doEval('%AsyncGeneratorFunction%'); + if (fn) { + value = fn.prototype; + } + } else if (name === '%AsyncIteratorPrototype%') { + var gen = doEval('%AsyncGenerator%'); + if (gen) { + value = getProto(gen.prototype); + } + } + + INTRINSICS[name] = value; + + return value; +}; + +var LEGACY_ALIASES = { + '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], + '%ArrayPrototype%': ['Array', 'prototype'], + '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], + '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], + '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], + '%ArrayProto_values%': ['Array', 'prototype', 'values'], + '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], + '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], + '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], + '%BooleanPrototype%': ['Boolean', 'prototype'], + '%DataViewPrototype%': ['DataView', 'prototype'], + '%DatePrototype%': ['Date', 'prototype'], + '%ErrorPrototype%': ['Error', 'prototype'], + '%EvalErrorPrototype%': ['EvalError', 'prototype'], + '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], + '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], + '%FunctionPrototype%': ['Function', 'prototype'], + '%Generator%': ['GeneratorFunction', 'prototype'], + '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], + '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], + '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], + '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], + '%JSONParse%': ['JSON', 'parse'], + '%JSONStringify%': ['JSON', 'stringify'], + '%MapPrototype%': ['Map', 'prototype'], + '%NumberPrototype%': ['Number', 'prototype'], + '%ObjectPrototype%': ['Object', 'prototype'], + '%ObjProto_toString%': ['Object', 'prototype', 'toString'], + '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], + '%PromisePrototype%': ['Promise', 'prototype'], + '%PromiseProto_then%': ['Promise', 'prototype', 'then'], + '%Promise_all%': ['Promise', 'all'], + '%Promise_reject%': ['Promise', 'reject'], + '%Promise_resolve%': ['Promise', 'resolve'], + '%RangeErrorPrototype%': ['RangeError', 'prototype'], + '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], + '%RegExpPrototype%': ['RegExp', 'prototype'], + '%SetPrototype%': ['Set', 'prototype'], + '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], + '%StringPrototype%': ['String', 'prototype'], + '%SymbolPrototype%': ['Symbol', 'prototype'], + '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], + '%TypedArrayPrototype%': ['TypedArray', 'prototype'], + '%TypeErrorPrototype%': ['TypeError', 'prototype'], + '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], + '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], + '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], + '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], + '%URIErrorPrototype%': ['URIError', 'prototype'], + '%WeakMapPrototype%': ['WeakMap', 'prototype'], + '%WeakSetPrototype%': ['WeakSet', 'prototype'] +}; + +var bind = require('function-bind'); +var hasOwn = require('has'); +var $concat = bind.call(Function.call, Array.prototype.concat); +var $spliceApply = bind.call(Function.apply, Array.prototype.splice); +var $replace = bind.call(Function.call, String.prototype.replace); +var $strSlice = bind.call(Function.call, String.prototype.slice); + +/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ +var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; +var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ +var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + if (first === '%' && last !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); + } else if (last === '%' && first !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); + } + var result = []; + $replace(string, rePropName, function (match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; + }); + return result; +}; +/* end adaptation */ + +var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = '%' + alias[0] + '%'; + } + + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === 'undefined' && !allowMissing) { + throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + + return { + alias: alias, + name: intrinsicName, + value: value + }; + } + + throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== 'string' || name.length === 0) { + throw new $TypeError('intrinsic name must be a non-empty string'); + } + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; + + var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + if ( + ( + (first === '"' || first === "'" || first === '`') + || (last === '"' || last === "'" || last === '`') + ) + && first !== last + ) { + throw new $SyntaxError('property names with quotes must have matching quotes'); + } + if (part === 'constructor' || !isOwn) { + skipFurtherCaching = true; + } + + intrinsicBaseName += '.' + part; + intrinsicRealName = '%' + intrinsicBaseName + '%'; + + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); + } + return void undefined; + } + if ($gOPD && (i + 1) >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + + // By convention, when a data property is converted to an accessor + // property to emulate a data property that does not suffer from + // the override mistake, that accessor's getter is marked with + // an `originalValue` property. Here, when we detect this, we + // uphold the illusion by pretending to see that original data + // property, i.e., returning the value rather than the getter + // itself. + if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; +}; + +},{"function-bind":10,"has":14,"has-symbols":12}],12:[function(require,module,exports){ +'use strict'; + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; +var hasSymbolSham = require('./shams'); + +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { return false; } + if (typeof Symbol !== 'function') { return false; } + if (typeof origSymbol('foo') !== 'symbol') { return false; } + if (typeof Symbol('bar') !== 'symbol') { return false; } + + return hasSymbolSham(); +}; + +},{"./shams":13}],13:[function(require,module,exports){ +'use strict'; + +/* eslint complexity: [2, 18], max-statements: [2, 33] */ +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } + if (typeof Symbol.iterator === 'symbol') { return true; } + + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + if (typeof sym === 'string') { return false; } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } + + // temp disabled per https://github.com/ljharb/object.assign/issues/17 + // if (sym instanceof Symbol) { return false; } + // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 + // if (!(symObj instanceof Symbol)) { return false; } + + // if (typeof Symbol.prototype.toString !== 'function') { return false; } + // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } + + var symVal = 42; + obj[sym] = symVal; + for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } + + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { return false; } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + var descriptor = Object.getOwnPropertyDescriptor(obj, sym); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } + } + + return true; +}; + +},{}],14:[function(require,module,exports){ +'use strict'; + +var bind = require('function-bind'); + +module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty); + +},{"function-bind":10}],15:[function(require,module,exports){ +var hasMap = typeof Map === 'function' && Map.prototype; +var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; +var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; +var mapForEach = hasMap && Map.prototype.forEach; +var hasSet = typeof Set === 'function' && Set.prototype; +var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; +var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; +var setForEach = hasSet && Set.prototype.forEach; +var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; +var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; +var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; +var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; +var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; +var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; +var booleanValueOf = Boolean.prototype.valueOf; +var objectToString = Object.prototype.toString; +var functionToString = Function.prototype.toString; +var $match = String.prototype.match; +var $slice = String.prototype.slice; +var $replace = String.prototype.replace; +var $toUpperCase = String.prototype.toUpperCase; +var $toLowerCase = String.prototype.toLowerCase; +var $test = RegExp.prototype.test; +var $concat = Array.prototype.concat; +var $join = Array.prototype.join; +var $arrSlice = Array.prototype.slice; +var $floor = Math.floor; +var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; +var gOPS = Object.getOwnPropertySymbols; +var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; +var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; +// ie, `has-tostringtag/shams +var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') + ? Symbol.toStringTag + : null; +var isEnumerable = Object.prototype.propertyIsEnumerable; + +var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( + [].__proto__ === Array.prototype // eslint-disable-line no-proto + ? function (O) { + return O.__proto__; // eslint-disable-line no-proto + } + : null +); + +function addNumericSeparator(num, str) { + if ( + num === Infinity + || num === -Infinity + || num !== num + || (num && num > -1000 && num < 1000) + || $test.call(/e/, str) + ) { + return str; + } + var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; + if (typeof num === 'number') { + var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) + if (int !== num) { + var intStr = String(int); + var dec = $slice.call(str, intStr.length + 1); + return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); + } + } + return $replace.call(str, sepRegex, '$&_'); +} + +var inspectCustom = require('./util.inspect').custom; +var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null; + +module.exports = function inspect_(obj, options, depth, seen) { + var opts = options || {}; + + if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { + throw new TypeError('option "quoteStyle" must be "single" or "double"'); + } + if ( + has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' + ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity + : opts.maxStringLength !== null + ) + ) { + throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); + } + var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; + if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { + throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); + } + + if ( + has(opts, 'indent') + && opts.indent !== null + && opts.indent !== '\t' + && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) + ) { + throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); + } + if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { + throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); + } + var numericSeparator = opts.numericSeparator; + + if (typeof obj === 'undefined') { + return 'undefined'; + } + if (obj === null) { + return 'null'; + } + if (typeof obj === 'boolean') { + return obj ? 'true' : 'false'; + } + + if (typeof obj === 'string') { + return inspectString(obj, opts); + } + if (typeof obj === 'number') { + if (obj === 0) { + return Infinity / obj > 0 ? '0' : '-0'; + } + var str = String(obj); + return numericSeparator ? addNumericSeparator(obj, str) : str; + } + if (typeof obj === 'bigint') { + var bigIntStr = String(obj) + 'n'; + return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; + } + + var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; + if (typeof depth === 'undefined') { depth = 0; } + if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { + return isArray(obj) ? '[Array]' : '[Object]'; + } + + var indent = getIndent(opts, depth); + + if (typeof seen === 'undefined') { + seen = []; + } else if (indexOf(seen, obj) >= 0) { + return '[Circular]'; + } + + function inspect(value, from, noIndent) { + if (from) { + seen = $arrSlice.call(seen); + seen.push(from); + } + if (noIndent) { + var newOpts = { + depth: opts.depth + }; + if (has(opts, 'quoteStyle')) { + newOpts.quoteStyle = opts.quoteStyle; + } + return inspect_(value, newOpts, depth + 1, seen); + } + return inspect_(value, opts, depth + 1, seen); + } + + if (typeof obj === 'function') { + var name = nameOf(obj); + var keys = arrObjKeys(obj, inspect); + return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); + } + if (isSymbol(obj)) { + var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); + return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; + } + if (isElement(obj)) { + var s = '<' + $toLowerCase.call(String(obj.nodeName)); + var attrs = obj.attributes || []; + for (var i = 0; i < attrs.length; i++) { + s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); + } + s += '>'; + if (obj.childNodes && obj.childNodes.length) { s += '...'; } + s += ''; + return s; + } + if (isArray(obj)) { + if (obj.length === 0) { return '[]'; } + var xs = arrObjKeys(obj, inspect); + if (indent && !singleLineValues(xs)) { + return '[' + indentedJoin(xs, indent) + ']'; + } + return '[ ' + $join.call(xs, ', ') + ' ]'; + } + if (isError(obj)) { + var parts = arrObjKeys(obj, inspect); + if ('cause' in obj && !isEnumerable.call(obj, 'cause')) { + return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; + } + if (parts.length === 0) { return '[' + String(obj) + ']'; } + return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; + } + if (typeof obj === 'object' && customInspect) { + if (inspectSymbol && typeof obj[inspectSymbol] === 'function') { + return obj[inspectSymbol](); + } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { + return obj.inspect(); + } + } + if (isMap(obj)) { + var mapParts = []; + mapForEach.call(obj, function (value, key) { + mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); + }); + return collectionOf('Map', mapSize.call(obj), mapParts, indent); + } + if (isSet(obj)) { + var setParts = []; + setForEach.call(obj, function (value) { + setParts.push(inspect(value, obj)); + }); + return collectionOf('Set', setSize.call(obj), setParts, indent); + } + if (isWeakMap(obj)) { + return weakCollectionOf('WeakMap'); + } + if (isWeakSet(obj)) { + return weakCollectionOf('WeakSet'); + } + if (isWeakRef(obj)) { + return weakCollectionOf('WeakRef'); + } + if (isNumber(obj)) { + return markBoxed(inspect(Number(obj))); + } + if (isBigInt(obj)) { + return markBoxed(inspect(bigIntValueOf.call(obj))); + } + if (isBoolean(obj)) { + return markBoxed(booleanValueOf.call(obj)); + } + if (isString(obj)) { + return markBoxed(inspect(String(obj))); + } + if (!isDate(obj) && !isRegExp(obj)) { + var ys = arrObjKeys(obj, inspect); + var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; + var protoTag = obj instanceof Object ? '' : 'null prototype'; + var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; + var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; + var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); + if (ys.length === 0) { return tag + '{}'; } + if (indent) { + return tag + '{' + indentedJoin(ys, indent) + '}'; + } + return tag + '{ ' + $join.call(ys, ', ') + ' }'; + } + return String(obj); +}; + +function wrapQuotes(s, defaultStyle, opts) { + var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; + return quoteChar + s + quoteChar; +} + +function quote(s) { + return $replace.call(String(s), /"/g, '"'); +} + +function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } + +// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives +function isSymbol(obj) { + if (hasShammedSymbols) { + return obj && typeof obj === 'object' && obj instanceof Symbol; + } + if (typeof obj === 'symbol') { + return true; + } + if (!obj || typeof obj !== 'object' || !symToString) { + return false; + } + try { + symToString.call(obj); + return true; + } catch (e) {} + return false; +} + +function isBigInt(obj) { + if (!obj || typeof obj !== 'object' || !bigIntValueOf) { + return false; + } + try { + bigIntValueOf.call(obj); + return true; + } catch (e) {} + return false; +} + +var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; +function has(obj, key) { + return hasOwn.call(obj, key); +} + +function toStr(obj) { + return objectToString.call(obj); +} + +function nameOf(f) { + if (f.name) { return f.name; } + var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); + if (m) { return m[1]; } + return null; +} + +function indexOf(xs, x) { + if (xs.indexOf) { return xs.indexOf(x); } + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) { return i; } + } + return -1; +} + +function isMap(x) { + if (!mapSize || !x || typeof x !== 'object') { + return false; + } + try { + mapSize.call(x); + try { + setSize.call(x); + } catch (s) { + return true; + } + return x instanceof Map; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isWeakMap(x) { + if (!weakMapHas || !x || typeof x !== 'object') { + return false; + } + try { + weakMapHas.call(x, weakMapHas); + try { + weakSetHas.call(x, weakSetHas); + } catch (s) { + return true; + } + return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isWeakRef(x) { + if (!weakRefDeref || !x || typeof x !== 'object') { + return false; + } + try { + weakRefDeref.call(x); + return true; + } catch (e) {} + return false; +} + +function isSet(x) { + if (!setSize || !x || typeof x !== 'object') { + return false; + } + try { + setSize.call(x); + try { + mapSize.call(x); + } catch (m) { + return true; + } + return x instanceof Set; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isWeakSet(x) { + if (!weakSetHas || !x || typeof x !== 'object') { + return false; + } + try { + weakSetHas.call(x, weakSetHas); + try { + weakMapHas.call(x, weakMapHas); + } catch (s) { + return true; + } + return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isElement(x) { + if (!x || typeof x !== 'object') { return false; } + if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { + return true; + } + return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; +} + +function inspectString(str, opts) { + if (str.length > opts.maxStringLength) { + var remaining = str.length - opts.maxStringLength; + var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); + return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; + } + // eslint-disable-next-line no-control-regex + var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); + return wrapQuotes(s, 'single', opts); +} + +function lowbyte(c) { + var n = c.charCodeAt(0); + var x = { + 8: 'b', + 9: 't', + 10: 'n', + 12: 'f', + 13: 'r' + }[n]; + if (x) { return '\\' + x; } + return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); +} + +function markBoxed(str) { + return 'Object(' + str + ')'; +} + +function weakCollectionOf(type) { + return type + ' { ? }'; +} + +function collectionOf(type, size, entries, indent) { + var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); + return type + ' (' + size + ') {' + joinedEntries + '}'; +} + +function singleLineValues(xs) { + for (var i = 0; i < xs.length; i++) { + if (indexOf(xs[i], '\n') >= 0) { + return false; + } + } + return true; +} + +function getIndent(opts, depth) { + var baseIndent; + if (opts.indent === '\t') { + baseIndent = '\t'; + } else if (typeof opts.indent === 'number' && opts.indent > 0) { + baseIndent = $join.call(Array(opts.indent + 1), ' '); + } else { + return null; + } + return { + base: baseIndent, + prev: $join.call(Array(depth + 1), baseIndent) + }; +} + +function indentedJoin(xs, indent) { + if (xs.length === 0) { return ''; } + var lineJoiner = '\n' + indent.prev + indent.base; + return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; +} + +function arrObjKeys(obj, inspect) { + var isArr = isArray(obj); + var xs = []; + if (isArr) { + xs.length = obj.length; + for (var i = 0; i < obj.length; i++) { + xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; + } + } + var syms = typeof gOPS === 'function' ? gOPS(obj) : []; + var symMap; + if (hasShammedSymbols) { + symMap = {}; + for (var k = 0; k < syms.length; k++) { + symMap['$' + syms[k]] = syms[k]; + } + } + + for (var key in obj) { // eslint-disable-line no-restricted-syntax + if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue + if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue + if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { + // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section + continue; // eslint-disable-line no-restricted-syntax, no-continue + } else if ($test.call(/[^\w$]/, key)) { + xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); + } else { + xs.push(key + ': ' + inspect(obj[key], obj)); + } + } + if (typeof gOPS === 'function') { + for (var j = 0; j < syms.length; j++) { + if (isEnumerable.call(obj, syms[j])) { + xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); + } + } + } + return xs; +} + +},{"./util.inspect":6}],16:[function(require,module,exports){ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); +var callBound = require('call-bind/callBound'); +var inspect = require('object-inspect'); + +var $TypeError = GetIntrinsic('%TypeError%'); +var $WeakMap = GetIntrinsic('%WeakMap%', true); +var $Map = GetIntrinsic('%Map%', true); + +var $weakMapGet = callBound('WeakMap.prototype.get', true); +var $weakMapSet = callBound('WeakMap.prototype.set', true); +var $weakMapHas = callBound('WeakMap.prototype.has', true); +var $mapGet = callBound('Map.prototype.get', true); +var $mapSet = callBound('Map.prototype.set', true); +var $mapHas = callBound('Map.prototype.has', true); + +/* + * This function traverses the list returning the node corresponding to the + * given key. + * + * That node is also moved to the head of the list, so that if it's accessed + * again we don't need to traverse the whole list. By doing so, all the recently + * used nodes can be accessed relatively quickly. + */ +var listGetNode = function (list, key) { // eslint-disable-line consistent-return + for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) { + if (curr.key === key) { + prev.next = curr.next; + curr.next = list.next; + list.next = curr; // eslint-disable-line no-param-reassign + return curr; + } + } +}; + +var listGet = function (objects, key) { + var node = listGetNode(objects, key); + return node && node.value; +}; +var listSet = function (objects, key, value) { + var node = listGetNode(objects, key); + if (node) { + node.value = value; + } else { + // Prepend the new node to the beginning of the list + objects.next = { // eslint-disable-line no-param-reassign + key: key, + next: objects.next, + value: value + }; + } +}; +var listHas = function (objects, key) { + return !!listGetNode(objects, key); +}; + +module.exports = function getSideChannel() { + var $wm; + var $m; + var $o; + var channel = { + assert: function (key) { + if (!channel.has(key)) { + throw new $TypeError('Side channel does not contain ' + inspect(key)); + } + }, + get: function (key) { // eslint-disable-line consistent-return + if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { + if ($wm) { + return $weakMapGet($wm, key); + } + } else if ($Map) { + if ($m) { + return $mapGet($m, key); + } + } else { + if ($o) { // eslint-disable-line no-lonely-if + return listGet($o, key); + } + } + }, + has: function (key) { + if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { + if ($wm) { + return $weakMapHas($wm, key); + } + } else if ($Map) { + if ($m) { + return $mapHas($m, key); + } + } else { + if ($o) { // eslint-disable-line no-lonely-if + return listHas($o, key); + } + } + return false; + }, + set: function (key, value) { + if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { + if (!$wm) { + $wm = new $WeakMap(); + } + $weakMapSet($wm, key, value); + } else if ($Map) { + if (!$m) { + $m = new $Map(); + } + $mapSet($m, key, value); + } else { + if (!$o) { + /* + * Initialize the linked list as an empty node, so that we don't have + * to special-case handling of the first node: we can always refer to + * it as (previous node).next, instead of something like (list).head + */ + $o = { key: {}, next: null }; + } + listSet($o, key, value); + } + } + }; + return channel; +}; + +},{"call-bind/callBound":7,"get-intrinsic":11,"object-inspect":15}]},{},[2])(2) }); diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js index 698a310..a4ac4fa 100644 --- a/node_modules/qs/lib/parse.js +++ b/node_modules/qs/lib/parse.js @@ -8,6 +8,7 @@ var isArray = Array.isArray; var defaults = { allowDots: false, allowPrototypes: false, + allowSparse: false, arrayLimit: 20, charset: 'utf-8', charsetSentinel: false, @@ -217,6 +218,7 @@ var normalizeParseOptions = function normalizeParseOptions(opts) { return { allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, charset: charset, charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, @@ -253,5 +255,9 @@ module.exports = function (str, opts) { obj = utils.merge(obj, newObj, options); } + if (options.allowSparse === true) { + return obj; + } + return utils.compact(obj); }; diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js index bdc19c6..47ea4b1 100644 --- a/node_modules/qs/lib/stringify.js +++ b/node_modules/qs/lib/stringify.js @@ -1,5 +1,6 @@ 'use strict'; +var getSideChannel = require('side-channel'); var utils = require('./utils'); var formats = require('./formats'); var has = Object.prototype.hasOwnProperty; @@ -55,6 +56,8 @@ var isNonNullishPrimitive = function isNonNullishPrimitive(v) { || typeof v === 'bigint'; }; +var sentinel = {}; + var stringify = function stringify( object, prefix, @@ -69,9 +72,30 @@ var stringify = function stringify( format, formatter, encodeValuesOnly, - charset + charset, + sideChannel ) { var obj = object; + + var tmpSc = sideChannel; + var step = 0; + var findFlag = false; + while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { + // Where object last appeared in the ref tree + var pos = tmpSc.get(object); + step += 1; + if (typeof pos !== 'undefined') { + if (pos === step) { + throw new RangeError('Cyclic object value'); + } else { + findFlag = true; // Break while + } + } + if (typeof tmpSc.get(sentinel) === 'undefined') { + step = 0; + } + } + if (typeof filter === 'function') { obj = filter(prefix, obj); } else if (obj instanceof Date) { @@ -138,6 +162,9 @@ var stringify = function stringify( ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix : prefix + (allowDots ? '.' + key : '[' + key + ']'); + sideChannel.set(object, step); + var valueSideChannel = getSideChannel(); + valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify( value, keyPrefix, @@ -152,7 +179,8 @@ var stringify = function stringify( format, formatter, encodeValuesOnly, - charset + charset, + valueSideChannel )); } @@ -246,6 +274,7 @@ module.exports = function (object, opts) { objKeys.sort(options.sort); } + var sideChannel = getSideChannel(); for (var i = 0; i < objKeys.length; ++i) { var key = objKeys[i]; @@ -266,7 +295,8 @@ module.exports = function (object, opts) { options.format, options.formatter, options.encodeValuesOnly, - options.charset + options.charset, + sideChannel )); } diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json index 3ec7c11..845e20a 100644 --- a/node_modules/qs/package.json +++ b/node_modules/qs/package.json @@ -2,7 +2,7 @@ "name": "qs", "description": "A querystring parser that supports nesting and arrays, with a depth limit", "homepage": "https://github.com/ljharb/qs", - "version": "6.9.7", + "version": "6.10.3", "repository": { "type": "git", "url": "https://github.com/ljharb/qs.git" @@ -29,6 +29,9 @@ "engines": { "node": ">=0.6" }, + "dependencies": { + "side-channel": "^1.0.4" + }, "devDependencies": { "@ljharb/eslint-config": "^20.1.0", "aud": "^1.1.5", diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js index 7721aaa..7d61023 100644 --- a/node_modules/qs/test/parse.js +++ b/node_modules/qs/test/parse.js @@ -269,6 +269,15 @@ test('parse()', function (t) { st.end(); }); + t.test('parses sparse arrays', function (st) { + /* eslint no-sparse-arrays: 0 */ + st.deepEqual(qs.parse('a[4]=1&a[1]=2', { allowSparse: true }), { a: [, '2', , , '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { allowSparse: true }), { a: [, { b: [, , { c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { allowSparse: true }), { a: [, [, , [, , , { c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { allowSparse: true }), { a: [, [, , [, , , { c: [, '1'] }]]] }); + st.end(); + }); + t.test('parses semi-parsed strings', function (st) { st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js index f761fb3..a3800aa 100644 --- a/node_modules/qs/test/stringify.js +++ b/node_modules/qs/test/stringify.js @@ -439,7 +439,7 @@ test('stringify()', function (t) { st.end(); }); - t.test('doesn\'t blow up when Buffer global is missing', function (st) { + t.test('does not blow up when Buffer global is missing', function (st) { var tempBuffer = global.Buffer; delete global.Buffer; var result = qs.stringify({ a: 'b', c: 'd' }); @@ -448,6 +448,57 @@ test('stringify()', function (t) { st.end(); }); + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + st['throws']( + function () { qs.stringify({ 'foo[bar]': 'baz', 'foo[baz]': a }); }, + /RangeError: Cyclic object value/, + 'cyclic values throw' + ); + + var circular = { + a: 'value' + }; + circular.a = circular; + st['throws']( + function () { qs.stringify(circular); }, + /RangeError: Cyclic object value/, + 'cyclic values throw' + ); + + var arr = ['a']; + st.doesNotThrow( + function () { qs.stringify({ x: arr, y: arr }); }, + 'non-cyclic values do not throw' + ); + + st.end(); + }); + + t.test('non-circular duplicated references can still work', function (st) { + var hourOfDay = { + 'function': 'hour_of_day' + }; + + var p1 = { + 'function': 'gte', + arguments: [hourOfDay, 0] + }; + var p2 = { + 'function': 'lte', + arguments: [hourOfDay, 23] + }; + + st.equal( + qs.stringify({ filters: { $and: [p1, p2] } }, { encodeValuesOnly: true }), + 'filters[$and][0][function]=gte&filters[$and][0][arguments][0][function]=hour_of_day&filters[$and][0][arguments][1]=0&filters[$and][1][function]=lte&filters[$and][1][arguments][0][function]=hour_of_day&filters[$and][1][arguments][1]=23' + ); + + st.end(); + }); + t.test('selects properties when filter=array', function (st) { st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); @@ -800,5 +851,15 @@ test('stringify()', function (t) { st.end(); }); + t.test('stringifies sparse arrays', function (st) { + /* eslint no-sparse-arrays: 0 */ + st.equal(qs.stringify({ a: [, '2', , , '1'] }, { encodeValuesOnly: true }), 'a[1]=2&a[4]=1'); + st.equal(qs.stringify({ a: [, { b: [, , { c: '1' }] }] }, { encodeValuesOnly: true }), 'a[1][b][2][c]=1'); + st.equal(qs.stringify({ a: [, [, , [, , , { c: '1' }]]] }, { encodeValuesOnly: true }), 'a[1][2][3][c]=1'); + st.equal(qs.stringify({ a: [, [, , [, , , { c: [, '1'] }]]] }, { encodeValuesOnly: true }), 'a[1][2][3][c][1]=1'); + + st.end(); + }); + t.end(); }); diff --git a/node_modules/raw-body/HISTORY.md b/node_modules/raw-body/HISTORY.md index 2659c4d..0b6b837 100644 --- a/node_modules/raw-body/HISTORY.md +++ b/node_modules/raw-body/HISTORY.md @@ -1,3 +1,17 @@ +2.5.1 / 2022-02-28 +================== + + * Fix error on early async hooks implementations + +2.5.0 / 2022-02-21 +================== + + * Prevent loss of async hooks context + * Prevent hanging when stream is not readable + * deps: http-errors@2.0.0 + - deps: depd@2.0.0 + - deps: statuses@2.0.1 + 2.4.3 / 2022-02-14 ================== diff --git a/node_modules/raw-body/LICENSE b/node_modules/raw-body/LICENSE index d695c8f..1029a7a 100644 --- a/node_modules/raw-body/LICENSE +++ b/node_modules/raw-body/LICENSE @@ -1,7 +1,7 @@ The MIT License (MIT) Copyright (c) 2013-2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson +Copyright (c) 2014-2022 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/node_modules/raw-body/README.md b/node_modules/raw-body/README.md index c0d0e6f..695c660 100644 --- a/node_modules/raw-body/README.md +++ b/node_modules/raw-body/README.md @@ -111,6 +111,10 @@ This error will occur when the given stream has an encoding set on it, making it a decoded stream. The stream should not have an encoding set and is expected to emit `Buffer` objects. +#### stream.not.readable + +This error will occur when the given stream is not readable. + ## Examples ### Simple Express example diff --git a/node_modules/raw-body/index.js b/node_modules/raw-body/index.js index 7fe8186..a8f537f 100644 --- a/node_modules/raw-body/index.js +++ b/node_modules/raw-body/index.js @@ -1,7 +1,7 @@ /*! * raw-body * Copyright(c) 2013-2014 Jonathan Ong - * Copyright(c) 2014-2015 Douglas Christopher Wilson + * Copyright(c) 2014-2022 Douglas Christopher Wilson * MIT Licensed */ @@ -12,6 +12,7 @@ * @private */ +var asyncHooks = tryRequireAsyncHooks() var bytes = require('bytes') var createError = require('http-errors') var iconv = require('iconv-lite') @@ -105,7 +106,7 @@ function getRawBody (stream, options, callback) { if (done) { // classic callback style - return readStream(stream, encoding, length, limit, done) + return readStream(stream, encoding, length, limit, wrap(done)) } return new Promise(function executor (resolve, reject) { @@ -173,6 +174,12 @@ function readStream (stream, encoding, length, limit, callback) { })) } + if (typeof stream.readable !== 'undefined' && !stream.readable) { + return done(createError(500, 'stream is not readable', { + type: 'stream.not.readable' + })) + } + var received = 0 var decoder @@ -284,3 +291,39 @@ function readStream (stream, encoding, length, limit, callback) { stream.removeListener('close', cleanup) } } + +/** + * Try to require async_hooks + * @private + */ + +function tryRequireAsyncHooks () { + try { + return require('async_hooks') + } catch (e) { + return {} + } +} + +/** + * Wrap function with async resource, if possible. + * AsyncResource.bind static method backported. + * @private + */ + +function wrap (fn) { + var res + + // create anonymous resource + if (asyncHooks.AsyncResource) { + res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn') + } + + // incompatible node.js + if (!res || !res.runInAsyncScope) { + return fn + } + + // return bound function + return res.runInAsyncScope.bind(res, fn, null) +} diff --git a/node_modules/raw-body/package.json b/node_modules/raw-body/package.json index 88ebcc9..50fc90a 100644 --- a/node_modules/raw-body/package.json +++ b/node_modules/raw-body/package.json @@ -1,7 +1,7 @@ { "name": "raw-body", "description": "Get and validate the raw body of a readable stream.", - "version": "2.4.3", + "version": "2.5.1", "author": "Jonathan Ong (http://jongleberry.com)", "contributors": [ "Douglas Christopher Wilson ", @@ -11,7 +11,7 @@ "repository": "stream-utils/raw-body", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -24,7 +24,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", - "mocha": "9.2.0", + "mocha": "9.2.1", "nyc": "15.1.0", "readable-stream": "2.3.7", "safe-buffer": "5.2.1" @@ -36,13 +36,14 @@ "HISTORY.md", "LICENSE", "README.md", + "SECURITY.md", "index.d.ts", "index.js" ], "scripts": { "lint": "eslint .", "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", "test-cov": "nyc --reporter=html --reporter=text npm test" } } diff --git a/node_modules/request/index.js b/node_modules/request/index.js old mode 100644 new mode 100755 diff --git a/node_modules/request/node_modules/.bin/uuid b/node_modules/request/node_modules/.bin/uuid deleted file mode 100644 index 2cfa7bf..0000000 --- a/node_modules/request/node_modules/.bin/uuid +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../uuid/bin/uuid" "$@" -else - exec node "$basedir/../uuid/bin/uuid" "$@" -fi diff --git a/node_modules/request/node_modules/.bin/uuid b/node_modules/request/node_modules/.bin/uuid new file mode 120000 index 0000000..b3e45bc --- /dev/null +++ b/node_modules/request/node_modules/.bin/uuid @@ -0,0 +1 @@ +../uuid/bin/uuid \ No newline at end of file diff --git a/node_modules/request/node_modules/.bin/uuid.cmd b/node_modules/request/node_modules/.bin/uuid.cmd deleted file mode 100644 index 1156e27..0000000 --- a/node_modules/request/node_modules/.bin/uuid.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uuid\bin\uuid" %* diff --git a/node_modules/request/node_modules/.bin/uuid.ps1 b/node_modules/request/node_modules/.bin/uuid.ps1 deleted file mode 100644 index 9e6c24b..0000000 --- a/node_modules/request/node_modules/.bin/uuid.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../uuid/bin/uuid" $args - } else { - & "$basedir/node$exe" "$basedir/../uuid/bin/uuid" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../uuid/bin/uuid" $args - } else { - & "node$exe" "$basedir/../uuid/bin/uuid" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/request/node_modules/uuid/bin/uuid b/node_modules/request/node_modules/uuid/bin/uuid old mode 100644 new mode 100755 diff --git a/node_modules/rimraf/bin.js b/node_modules/rimraf/bin.js old mode 100644 new mode 100755 diff --git a/node_modules/semver/bin/semver.js b/node_modules/semver/bin/semver.js old mode 100644 new mode 100755 diff --git a/node_modules/send/HISTORY.md b/node_modules/send/HISTORY.md index 8aa3ab3..a739774 100644 --- a/node_modules/send/HISTORY.md +++ b/node_modules/send/HISTORY.md @@ -1,3 +1,18 @@ +0.18.0 / 2022-03-23 +=================== + + * Fix emitted 416 error missing headers property + * Limit the headers removed for 304 response + * deps: depd@2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: destroy@1.2.0 + * deps: http-errors@2.0.0 + - deps: depd@2.0.0 + - deps: statuses@2.0.1 + * deps: on-finished@2.4.1 + * deps: statuses@2.0.1 + 0.17.2 / 2021-12-11 =================== diff --git a/node_modules/send/LICENSE b/node_modules/send/LICENSE index 4aa69e8..b6ea1c1 100644 --- a/node_modules/send/LICENSE +++ b/node_modules/send/LICENSE @@ -1,7 +1,7 @@ (The MIT License) Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2014-2016 Douglas Christopher Wilson +Copyright (c) 2014-2022 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/node_modules/send/README.md b/node_modules/send/README.md index fc1d3a1..fadf838 100644 --- a/node_modules/send/README.md +++ b/node_modules/send/README.md @@ -318,8 +318,8 @@ server.listen(3000) [appveyor-url]: https://ci.appveyor.com/project/dougwilson/send [coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/send/master [coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master -[github-actions-ci-image]: https://badgen.net/github/checks/pillarjs/send/master?label=ci -[github-actions-ci-url]: https://github.com/pillarjs/send/actions?query=workflow%3Aci +[github-actions-ci-image]: https://badgen.net/github/checks/pillarjs/send/master?label=linux +[github-actions-ci-url]: https://github.com/pillarjs/send/actions/workflows/ci.yml [node-image]: https://badgen.net/npm/node/send [node-url]: https://nodejs.org/en/download/ [npm-downloads-image]: https://badgen.net/npm/dm/send diff --git a/node_modules/send/index.js b/node_modules/send/index.js index 06d7507..89afd7e 100644 --- a/node_modules/send/index.js +++ b/node_modules/send/index.js @@ -1,7 +1,7 @@ /*! * send * Copyright(c) 2012 TJ Holowaychuk - * Copyright(c) 2014-2016 Douglas Christopher Wilson + * Copyright(c) 2014-2022 Douglas Christopher Wilson * MIT Licensed */ @@ -267,13 +267,11 @@ SendStream.prototype.maxage = deprecate.function(function maxage (maxAge) { SendStream.prototype.error = function error (status, err) { // emit if listeners instead of responding if (hasListeners(this, 'error')) { - return this.emit('error', createError(status, err, { - expose: false - })) + return this.emit('error', createHttpError(status, err)) } var res = this.res - var msg = statuses[status] || String(status) + var msg = statuses.message[status] || String(status) var doc = createHtmlDocument('Error', escapeHtml(msg)) // clear existing headers @@ -349,21 +347,19 @@ SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () { } /** - * Strip content-* header fields. + * Strip various content header fields for a change in entity. * * @private */ SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () { var res = this.res - var headers = getHeaderNames(res) - for (var i = 0; i < headers.length; i++) { - var header = headers[i] - if (header.substr(0, 8) === 'content-' && header !== 'content-location') { - res.removeHeader(header) - } - } + res.removeHeader('Content-Encoding') + res.removeHeader('Content-Language') + res.removeHeader('Content-Length') + res.removeHeader('Content-Range') + res.removeHeader('Content-Type') } /** @@ -787,8 +783,6 @@ SendStream.prototype.sendIndex = function sendIndex (path) { */ SendStream.prototype.stream = function stream (path, options) { - // TODO: this is all lame, refactor meeee - var finished = false var self = this var res = this.res @@ -797,20 +791,18 @@ SendStream.prototype.stream = function stream (path, options) { this.emit('stream', stream) stream.pipe(res) - // response finished, done with the fd - onFinished(res, function onfinished () { - finished = true - destroy(stream) - }) + // cleanup + function cleanup () { + destroy(stream, true) + } - // error handling code-smell + // response finished, cleanup + onFinished(res, cleanup) + + // error handling stream.on('error', function onerror (err) { - // request already finished - if (finished) return - - // clean up stream - finished = true - destroy(stream) + // clean up stream early + cleanup() // error self.onStatError(err) @@ -974,6 +966,24 @@ function createHtmlDocument (title, body) { '\n' } +/** + * Create a HttpError object from simple arguments. + * + * @param {number} status + * @param {Error|object} err + * @private + */ + +function createHttpError (status, err) { + if (!err) { + return createError(status) + } + + return err instanceof Error + ? createError(status, err, { expose: false }) + : createError(status, err) +} + /** * decodeURIComponent. * diff --git a/node_modules/send/package.json b/node_modules/send/package.json index f58140c..7f269d5 100644 --- a/node_modules/send/package.json +++ b/node_modules/send/package.json @@ -1,7 +1,7 @@ { "name": "send", "description": "Better streaming static file server with Range and conditional-GET support", - "version": "0.17.2", + "version": "0.18.0", "author": "TJ Holowaychuk ", "contributors": [ "Douglas Christopher Wilson ", @@ -17,36 +17,37 @@ ], "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "devDependencies": { "after": "0.8.2", "eslint": "7.32.0", "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.3", + "eslint-plugin-import": "2.25.4", "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", - "mocha": "9.1.3", + "mocha": "9.2.2", "nyc": "15.1.0", - "supertest": "6.1.6" + "supertest": "6.2.2" }, "files": [ "HISTORY.md", "LICENSE", "README.md", + "SECURITY.md", "index.js" ], "engines": { diff --git a/node_modules/serve-static/HISTORY.md b/node_modules/serve-static/HISTORY.md index eafa750..6b58456 100644 --- a/node_modules/serve-static/HISTORY.md +++ b/node_modules/serve-static/HISTORY.md @@ -1,3 +1,15 @@ +1.15.0 / 2022-03-24 +=================== + + * deps: send@0.18.0 + - Fix emitted 416 error missing headers property + - Limit the headers removed for 304 response + - deps: depd@2.0.0 + - deps: destroy@1.2.0 + - deps: http-errors@2.0.0 + - deps: on-finished@2.4.1 + - deps: statuses@2.0.1 + 1.14.2 / 2021-12-15 =================== diff --git a/node_modules/serve-static/README.md b/node_modules/serve-static/README.md index aa94341..262d944 100644 --- a/node_modules/serve-static/README.md +++ b/node_modules/serve-static/README.md @@ -249,7 +249,7 @@ function setCustomCacheControl (res, path) { [coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/serve-static/master [coveralls-url]: https://coveralls.io/r/expressjs/serve-static?branch=master [github-actions-ci-image]: https://badgen.net/github/checks/expressjs/serve-static/master?label=linux -[github-actions-ci-url]: https://github.com/expressjs/serve-static/actions?query=workflow%3Aci +[github-actions-ci-url]: https://github.com/expressjs/serve-static/actions/workflows/ci.yml [node-image]: https://badgen.net/npm/node/serve-static [node-url]: https://nodejs.org/en/download/ [npm-downloads-image]: https://badgen.net/npm/dm/serve-static diff --git a/node_modules/serve-static/package.json b/node_modules/serve-static/package.json index e223bef..9d935f5 100644 --- a/node_modules/serve-static/package.json +++ b/node_modules/serve-static/package.json @@ -1,7 +1,7 @@ { "name": "serve-static", "description": "Serve static files", - "version": "1.14.2", + "version": "1.15.0", "author": "Douglas Christopher Wilson ", "license": "MIT", "repository": "expressjs/serve-static", @@ -9,20 +9,20 @@ "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "devDependencies": { "eslint": "7.32.0", "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.3", + "eslint-plugin-import": "2.25.4", "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", - "mocha": "9.1.3", + "mocha": "9.2.2", "nyc": "15.1.0", "safe-buffer": "5.2.1", - "supertest": "6.1.6" + "supertest": "6.2.2" }, "files": [ "LICENSE", diff --git a/node_modules/sshpk/bin/sshpk-conv b/node_modules/sshpk/bin/sshpk-conv old mode 100644 new mode 100755 diff --git a/node_modules/sshpk/bin/sshpk-sign b/node_modules/sshpk/bin/sshpk-sign old mode 100644 new mode 100755 diff --git a/node_modules/sshpk/bin/sshpk-verify b/node_modules/sshpk/bin/sshpk-verify old mode 100644 new mode 100755 diff --git a/node_modules/statuses/HISTORY.md b/node_modules/statuses/HISTORY.md index a1977b2..fa4556e 100644 --- a/node_modules/statuses/HISTORY.md +++ b/node_modules/statuses/HISTORY.md @@ -1,3 +1,20 @@ +2.0.1 / 2021-01-03 +================== + + * Fix returning values from `Object.prototype` + +2.0.0 / 2020-04-19 +================== + + * Drop support for Node.js 0.6 + * Fix messaging casing of `418 I'm a Teapot` + * Remove code 306 + * Remove `status[code]` exports; use `status.message[code]` + * Remove `status[msg]` exports; use `status.code[msg]` + * Rename `425 Unordered Collection` to standard `425 Too Early` + * Rename `STATUS_CODES` export to `message` + * Return status message for `statuses(code)` when given code + 1.5.0 / 2018-03-27 ================== diff --git a/node_modules/statuses/README.md b/node_modules/statuses/README.md index 0fe5720..57967e6 100644 --- a/node_modules/statuses/README.md +++ b/node_modules/statuses/README.md @@ -1,9 +1,9 @@ -# Statuses +# statuses -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] +[![Build Status][ci-image]][ci-url] [![Test Coverage][coveralls-image]][coveralls-url] HTTP status utility for node. @@ -34,62 +34,45 @@ $ npm install statuses var status = require('statuses') ``` -### var code = status(Integer || String) +### status(code) -If `Integer` or `String` is a valid HTTP code or status message, then the -appropriate `code` will be returned. Otherwise, an error will be thrown. +Returns the status message string for a known HTTP status code. The code +may be a number or a string. An error is thrown for an unknown status code. ```js -status(403) // => 403 -status('403') // => 403 -status('forbidden') // => 403 -status('Forbidden') // => 403 -status(306) // throws, as it's not supported by node.js +status(403) // => 'Forbidden' +status('403') // => 'Forbidden' +status(306) // throws ``` -### status.STATUS_CODES +### status(msg) -Returns an object which maps status codes to status messages, in -the same format as the -[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). +Returns the numeric status code for a known HTTP status message. The message +is case-insensitive. An error is thrown for an unknown status message. + + + +```js +status('forbidden') // => 403 +status('Forbidden') // => 403 +status('foo') // throws +``` ### status.codes Returns an array of all the status codes as `Integer`s. -### var msg = status[code] +### status.code[msg] -Map of `code` to `status message`. `undefined` for invalid `code`s. - - - -```js -status[404] // => 'Not Found' -``` - -### var code = status[msg] - -Map of `status message` to `code`. `msg` can either be title-cased or -lower-cased. `undefined` for invalid `status message`s. +Returns the numeric status code for a known status message (in lower-case), +otherwise `undefined`. ```js status['not found'] // => 404 -status['Not Found'] // => 404 -``` - -### status.redirect[code] - -Returns `true` if a status code is a valid redirect status. - - - -```js -status.redirect[200] // => undefined -status.redirect[301] // => true ``` ### status.empty[code] @@ -104,6 +87,29 @@ status.empty[204] // => true status.empty[304] // => true ``` +### status.message[code] + +Returns the string message for a known numeric status code, otherwise +`undefined`. This object is the same format as the +[Node.js http module `http.STATUS_CODES`](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). + + + +```js +status.message[404] // => 'Not Found' +``` + +### status.redirect[code] + +Returns `true` if a status code is a valid redirect status. + + + +```js +status.redirect[200] // => undefined +status.redirect[301] // => true +``` + ### status.retry[code] Returns `true` if you should retry the rest. @@ -115,13 +121,16 @@ status.retry[501] // => undefined status.retry[503] // => true ``` -[npm-image]: https://img.shields.io/npm/v/statuses.svg -[npm-url]: https://npmjs.org/package/statuses -[node-version-image]: https://img.shields.io/node/v/statuses.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg -[travis-url]: https://travis-ci.org/jshttp/statuses -[coveralls-image]: https://img.shields.io/coveralls/jshttp/statuses.svg +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/statuses/master?label=ci +[ci-url]: https://github.com/jshttp/statuses/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/statuses/master [coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master -[downloads-image]: https://img.shields.io/npm/dm/statuses.svg -[downloads-url]: https://npmjs.org/package/statuses +[node-version-image]: https://badgen.net/npm/node/statuses +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/statuses +[npm-url]: https://npmjs.org/package/statuses +[npm-version-image]: https://badgen.net/npm/v/statuses diff --git a/node_modules/statuses/codes.json b/node_modules/statuses/codes.json index a09283a..1333ed1 100644 --- a/node_modules/statuses/codes.json +++ b/node_modules/statuses/codes.json @@ -19,7 +19,6 @@ "303": "See Other", "304": "Not Modified", "305": "Use Proxy", - "306": "(Unused)", "307": "Temporary Redirect", "308": "Permanent Redirect", "400": "Bad Request", @@ -40,12 +39,12 @@ "415": "Unsupported Media Type", "416": "Range Not Satisfiable", "417": "Expectation Failed", - "418": "I'm a teapot", + "418": "I'm a Teapot", "421": "Misdirected Request", "422": "Unprocessable Entity", "423": "Locked", "424": "Failed Dependency", - "425": "Unordered Collection", + "425": "Too Early", "426": "Upgrade Required", "428": "Precondition Required", "429": "Too Many Requests", diff --git a/node_modules/statuses/index.js b/node_modules/statuses/index.js index 4df469a..ea351c5 100644 --- a/node_modules/statuses/index.js +++ b/node_modules/statuses/index.js @@ -22,10 +22,13 @@ var codes = require('./codes.json') module.exports = status // status code to message map -status.STATUS_CODES = codes +status.message = codes + +// status message (lower-case) to code map +status.code = createMessageToStatusCodeMap(codes) // array of status codes -status.codes = populateStatusesMap(status, codes) +status.codes = createStatusCodeList(codes) // status codes for redirects status.redirect = { @@ -53,27 +56,61 @@ status.retry = { } /** - * Populate the statuses map for given codes. + * Create a map of message to status code. * @private */ -function populateStatusesMap (statuses, codes) { - var arr = [] +function createMessageToStatusCodeMap (codes) { + var map = {} Object.keys(codes).forEach(function forEachCode (code) { var message = codes[code] var status = Number(code) - // Populate properties - statuses[status] = message - statuses[message] = status - statuses[message.toLowerCase()] = status - - // Add to array - arr.push(status) + // populate map + map[message.toLowerCase()] = status }) - return arr + return map +} + +/** + * Create a list of all status codes. + * @private + */ + +function createStatusCodeList (codes) { + return Object.keys(codes).map(function mapCode (code) { + return Number(code) + }) +} + +/** + * Get the status code for given message. + * @private + */ + +function getStatusCode (message) { + var msg = message.toLowerCase() + + if (!Object.prototype.hasOwnProperty.call(status.code, msg)) { + throw new Error('invalid status message: "' + message + '"') + } + + return status.code[msg] +} + +/** + * Get the status message for given code. + * @private + */ + +function getStatusMessage (code) { + if (!Object.prototype.hasOwnProperty.call(status.message, code)) { + throw new Error('invalid status code: ' + code) + } + + return status.message[code] } /** @@ -92,8 +129,7 @@ function populateStatusesMap (statuses, codes) { function status (code) { if (typeof code === 'number') { - if (!status[code]) throw new Error('invalid status code: ' + code) - return code + return getStatusMessage(code) } if (typeof code !== 'string') { @@ -103,11 +139,8 @@ function status (code) { // '403' var n = parseInt(code, 10) if (!isNaN(n)) { - if (!status[n]) throw new Error('invalid status code: ' + n) - return n + return getStatusMessage(n) } - n = status[code.toLowerCase()] - if (!n) throw new Error('invalid status message: "' + code + '"') - return n + return getStatusCode(code) } diff --git a/node_modules/statuses/package.json b/node_modules/statuses/package.json index 7595e2b..8c3e719 100644 --- a/node_modules/statuses/package.json +++ b/node_modules/statuses/package.json @@ -1,7 +1,7 @@ { "name": "statuses", "description": "HTTP status utility", - "version": "1.5.0", + "version": "2.0.1", "contributors": [ "Douglas Christopher Wilson ", "Jonathan Ong (http://jongleberry.com)" @@ -20,29 +20,30 @@ "LICENSE" ], "devDependencies": { - "csv-parse": "1.2.4", - "eslint": "4.19.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.7.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "raw-body": "2.3.2", + "csv-parse": "4.14.2", + "eslint": "7.17.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.22.1", + "eslint-plugin-markdown": "1.0.2", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.2.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "8.2.1", + "nyc": "15.1.0", + "raw-body": "2.4.1", "stream-to-array": "2.3.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" }, "scripts": { "build": "node scripts/build.js", "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "update": "npm run fetch && npm run build" + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" } } diff --git a/node_modules/uri-js/LICENSE b/node_modules/uri-js/LICENSE old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/README.md b/node_modules/uri-js/README.md old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/es5/uri.all.d.ts b/node_modules/uri-js/dist/es5/uri.all.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/es5/uri.all.js b/node_modules/uri-js/dist/es5/uri.all.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/es5/uri.all.js.map b/node_modules/uri-js/dist/es5/uri.all.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/es5/uri.all.min.d.ts b/node_modules/uri-js/dist/es5/uri.all.min.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/es5/uri.all.min.js b/node_modules/uri-js/dist/es5/uri.all.min.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/es5/uri.all.min.js.map b/node_modules/uri-js/dist/es5/uri.all.min.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/index.d.ts b/node_modules/uri-js/dist/esnext/index.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/index.js b/node_modules/uri-js/dist/esnext/index.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/index.js.map b/node_modules/uri-js/dist/esnext/index.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.d.ts b/node_modules/uri-js/dist/esnext/regexps-iri.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.js b/node_modules/uri-js/dist/esnext/regexps-iri.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/regexps-iri.js.map b/node_modules/uri-js/dist/esnext/regexps-iri.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.d.ts b/node_modules/uri-js/dist/esnext/regexps-uri.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.js b/node_modules/uri-js/dist/esnext/regexps-uri.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/regexps-uri.js.map b/node_modules/uri-js/dist/esnext/regexps-uri.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/http.d.ts b/node_modules/uri-js/dist/esnext/schemes/http.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/http.js b/node_modules/uri-js/dist/esnext/schemes/http.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/http.js.map b/node_modules/uri-js/dist/esnext/schemes/http.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/https.d.ts b/node_modules/uri-js/dist/esnext/schemes/https.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/https.js b/node_modules/uri-js/dist/esnext/schemes/https.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/https.js.map b/node_modules/uri-js/dist/esnext/schemes/https.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts b/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.js b/node_modules/uri-js/dist/esnext/schemes/mailto.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/mailto.js.map b/node_modules/uri-js/dist/esnext/schemes/mailto.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map b/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.d.ts b/node_modules/uri-js/dist/esnext/schemes/urn.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.js b/node_modules/uri-js/dist/esnext/schemes/urn.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/urn.js.map b/node_modules/uri-js/dist/esnext/schemes/urn.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/ws.d.ts b/node_modules/uri-js/dist/esnext/schemes/ws.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/ws.js b/node_modules/uri-js/dist/esnext/schemes/ws.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/ws.js.map b/node_modules/uri-js/dist/esnext/schemes/ws.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/wss.d.ts b/node_modules/uri-js/dist/esnext/schemes/wss.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/wss.js b/node_modules/uri-js/dist/esnext/schemes/wss.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/schemes/wss.js.map b/node_modules/uri-js/dist/esnext/schemes/wss.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/uri.d.ts b/node_modules/uri-js/dist/esnext/uri.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/uri.js b/node_modules/uri-js/dist/esnext/uri.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/uri.js.map b/node_modules/uri-js/dist/esnext/uri.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/util.d.ts b/node_modules/uri-js/dist/esnext/util.d.ts old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/util.js b/node_modules/uri-js/dist/esnext/util.js old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/dist/esnext/util.js.map b/node_modules/uri-js/dist/esnext/util.js.map old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/package.json b/node_modules/uri-js/package.json old mode 100644 new mode 100755 diff --git a/node_modules/uri-js/yarn.lock b/node_modules/uri-js/yarn.lock old mode 100644 new mode 100755 diff --git a/node_modules/uuid/dist/bin/uuid b/node_modules/uuid/dist/bin/uuid old mode 100644 new mode 100755 diff --git a/node_modules/web-streams-polyfill/CHANGELOG.md b/node_modules/web-streams-polyfill/CHANGELOG.md deleted file mode 100644 index 4fe8258..0000000 --- a/node_modules/web-streams-polyfill/CHANGELOG.md +++ /dev/null @@ -1,134 +0,0 @@ -# Changelog - -> **Tags:** -> - 💥 Breaking Change -> - 👓 Spec Compliance -> - 🚀 New Feature -> - 🐛 Bug Fix -> - 👎 Deprecation -> - 📝 Documentation -> - 🏠 Internal -> - 💅 Polish - -## v3.2.0 (2021-11-06) - -* 👎 Deprecate `WritableStreamDefaultController.abortReason` ([#102](https://github.com/MattiasBuelens/web-streams-polyfill/pull/102)) - * Use `WritableStreamDefaultController.signal.reason` instead. -* 👓 Align with [spec version `4b6b93c`](https://github.com/whatwg/streams/tree/4b6b93c69e531e2fe45a6ed4cb1484a7ba4eb8bb/) ([#103](https://github.com/MattiasBuelens/web-streams-polyfill/pull/103)) - -## v3.1.1 (2021-09-06) - -* 🐛 Fix compatibility with TypeScript's DOM types for `ReadableStream` and `TransformStream` ([#85](https://github.com/MattiasBuelens/web-streams-polyfill/issues/85), [#86](https://github.com/MattiasBuelens/web-streams-polyfill/pull/86)) - -## v3.1.0 (2021-07-21) - -* 🚀 Calling `ReadableStream.tee()` on a readable byte stream now returns two readable byte streams. ([#81](https://github.com/MattiasBuelens/web-streams-polyfill/pull/81)) -* 🚀 Add `WritableStreamDefaultController.signal` and `.abortReason`. ([#81](https://github.com/MattiasBuelens/web-streams-polyfill/pull/81)) - * `.signal` requires a global `AbortController` constructor to be available. If necessary, use a polyfill. -* 🐛 Make sure streams created with a different version of the polyfill do not pass the brand checks. ([#75](https://github.com/MattiasBuelens/web-streams-polyfill/issues/75), [#77](https://github.com/MattiasBuelens/web-streams-polyfill/pull/77)) -* 👓 Align with [spec version `cada812`](https://github.com/whatwg/streams/tree/cada8129edcc4803b2878a7a3f5e1d8325dc0c23/) ([#79](https://github.com/MattiasBuelens/web-streams-polyfill/pull/79), [#81](https://github.com/MattiasBuelens/web-streams-polyfill/pull/81)) - -## v3.0.3 (2021-04-09) - -* 💅 Change `Promise` to `Promise` in TypeScript type definitions ([#72](https://github.com/MattiasBuelens/web-streams-polyfill/pull/72)) -* 🐛 Fix `ReadableStream.tee()` resolving its `cancel()` promise too early ([#73](https://github.com/MattiasBuelens/web-streams-polyfill/pull/73)) -* 👓 Align with [spec version `6762cdb`](https://github.com/whatwg/streams/tree/6762cdb4c6421cfa0da1d834d5a14fdd7326aaa5/) ([#73](https://github.com/MattiasBuelens/web-streams-polyfill/pull/73)) - -## v3.0.2 (2021-02-10) - -* 👓 Align with [spec version `200c971`](https://github.com/whatwg/streams/tree/200c971563b1a695fce3eebe6dab45c348ff0ac0/) ([#69](https://github.com/MattiasBuelens/web-streams-polyfill/pull/69)) - -## v3.0.1 (2020-11-12) - -* 📝 Add documentation to type definitions ([#62](https://github.com/MattiasBuelens/web-streams-polyfill/pull/62)) -* 👓 Align with [spec version `6cd5e81`](https://github.com/whatwg/streams/tree/6cd5e81f6191fed9e7d99ee73d4941e3060311ce/) ([#63](https://github.com/MattiasBuelens/web-streams-polyfill/pull/63)) -* 🐛 Fix an issue where the polyfill could throw an error when resolving/rejecting `reader.closed` when it was already resolved/rejected ([#66](https://github.com/MattiasBuelens/web-streams-polyfill/issues/66), [#67](https://github.com/MattiasBuelens/web-streams-polyfill/pull/67)) - -## v3.0.0 (2020-07-20) - -* 💥 Align with [spec version `62fe4c8`](https://github.com/whatwg/streams/tree/62fe4c8c0df34cec4ff28db9bfa69aec6c65e38d/) ([#52](https://github.com/MattiasBuelens/web-streams-polyfill/pull/52), [#57](https://github.com/MattiasBuelens/web-streams-polyfill/pull/57), [#59](https://github.com/MattiasBuelens/web-streams-polyfill/pull/59)) - This includes the following **breaking changes**: - * All classes are now exposed globally. Concretely, this adds the following classes: - * `ReadableStreamDefaultController` - * `ReadableByteStreamController` - * `ReadableStreamBYOBRequest` - * `ReadableStreamDefaultReader` - * `ReadableStreamBYOBReader` - * `WritableStreamDefaultController` - * `WritableStreamDefaultWriter` - * `TransformStreamDefaultController` - * `ReadableStream.getIterator()` is renamed to `ReadableStream.values()` - * `ReadableByteStreamController.byobRequest` can be `null` (instead of `undefined`) if there is no current BYOB request. - * `ReadableStreamBYOBRequest.view` can be `null` (instead of `undefined`) if the BYOB request has already been responded to. - * Constructors and methods have stricter type checking for object arguments. For example, `new ReadableStream(null)` would previously behave like `new ReadableStream({})`, but now it throws a `TypeError` instead. - * Some constructors and methods may throw slightly different errors when given invalid arguments. - * Various byte-stream-related APIs now prohibit zero-length views or buffers. - * The async iterator of a `ReadableStream` now behaves more like an async generator, e.g. returning promises fulfilled with `{ value: undefined, done: true }` after `return()`ing the iterator, instead of returning a rejected promise. -* 💥 Updated TypeScript types to align with new specification ([#60](https://github.com/MattiasBuelens/web-streams-polyfill/pull/60)) - While these are _technically_ breaking changes, you should only be affected if you manually reference these types from your code. - * `PipeOptions` is renamed to `StreamPipeOptions` - * `ReadResult` is replaced by `ReadableStreamDefaultReadResult` and `ReadableStreamBYOBReadResult` - * `ReadableStreamDefaultControllerCallback` is replaced by `UnderlyingSourceStartCallback` and `UnderlyingSourcePullCallback` - * `ReadableByteStreamControllerCallback` is replaced by `UnderlyingByteSourceStartCallback` and `UnderlyingByteSourcePullCallback` - * `ReadableStreamErrorCallback` is renamed to `UnderlyingSourceCancelCallback` - * `WritableStreamDefaultControllerStartCallback` is renamed to `UnderlyingSinkStartCallback` - * `WritableStreamDefaultControllerWriteCallback` is renamed to `UnderlyingSinkWriteCallback` - * `WritableStreamDefaultControllerCloseCallback` is renamed to `UnderlyingSinkCloseCallback` - * `WritableStreamErrorCallback` is renamed to `UnderlyingSinkAbortCallback` - * `TransformStreamDefaultControllerCallback` is replaced by `TransformerStartCallback` and `TransformerFlushCallback` - * `TransformStreamDefaultControllerTransformCallback` is renamed to `TransformerTransformCallback` - -## v2.1.1 (2020-04-11) - -* 💅 Improve `ReadResult` in TypeScript type definitions. ([759506e](https://github.com/MattiasBuelens/web-streams-polyfill/commit/759506e00e55289ae6f92f30922b8855fcddd9ab), [#49](https://github.com/MattiasBuelens/web-streams-polyfill/pull/49)) - -## v2.1.0 (2020-02-23) - -* 👓 Align with [spec version `ed00d2f`](https://github.com/whatwg/streams/tree/ed00d2fe2d53ac5ad9ff8e727c7ef0a68f424074/) ([#43](https://github.com/MattiasBuelens/web-streams-polyfill/issues/43), [#44](https://github.com/MattiasBuelens/web-streams-polyfill/pull/44)) -* 🏠 Down-level type definitions for older TypeScript versions. ([#41](https://github.com/MattiasBuelens/web-streams-polyfill/pull/41)) - -## v2.0.6 (2019-11-08) - -* 🐛 Fix type definitions to be compatible with TypeScript 3.3 and lower. ([#39](https://github.com/MattiasBuelens/web-streams-polyfill/issues/39), [#40](https://github.com/MattiasBuelens/web-streams-polyfill/pull/40)) - -## v2.0.5 (2019-10-08) - -* 👓 Align with [spec version `ae5e0cb`](https://github.com/whatwg/streams/tree/ae5e0cb41e9f72cdd97f3a6d47bc674c1f4049d1/) ([#33](https://github.com/MattiasBuelens/web-streams-polyfill/pull/33)) -* 🐛 Fix support for non-browser environments, such as Node. - * Accept polyfilled `AbortSignal`s. ([#36](https://github.com/MattiasBuelens/web-streams-polyfill/pull/36)) - * Polyfill `DOMException` if necessary. ([#37](https://github.com/MattiasBuelens/web-streams-polyfill/pull/37)) - -## v2.0.4 (2019-08-01) - -* 🐛 Fix pipe not aborting when both `preventAbort` and `preventCancel` are set ([#31](https://github.com/MattiasBuelens/web-streams-polyfill/pull/31)) -* 👓 Align with [spec version `e4d3b1a`](https://github.com/whatwg/streams/tree/e4d3b1a826e34d27a7cb5485a1cc4b078608c9ec/) ([#31](https://github.com/MattiasBuelens/web-streams-polyfill/pull/31)) - -## v2.0.3 (2019-04-04) - -* 👓 Align with [spec version `6f94580`](https://github.com/whatwg/streams/tree/6f94580f6731d1e017c516af097d47c45aad1f56/) ([#21](https://github.com/MattiasBuelens/web-streams-polyfill/pull/21)) -* 🏠 Run web platform tests on ES5 variant ([#19](https://github.com/MattiasBuelens/web-streams-polyfill/pull/19)) - -## v2.0.2 (2019-03-17) - -* 💅 Improve performance of `reader.read()` and `writer.write()` ([#17](https://github.com/MattiasBuelens/web-streams-polyfill/pull/17), [#18](https://github.com/MattiasBuelens/web-streams-polyfill/pull/18)) - -## v2.0.1 (2019-03-16) - -* 🐛 Fix performance issue with large queues ([#15](https://github.com/MattiasBuelens/web-streams-polyfill/pull/15), [#16](https://github.com/MattiasBuelens/web-streams-polyfill/pull/16)) - -## v2.0.0 (2019-03-10) - -* 💥 Ownership change: [@mattiasbuelens/web-streams-polyfill](https://www.npmjs.com/package/@mattiasbuelens/web-streams-polyfill/v/0.3.2) has been republished as [web-streams-polyfill](https://www.npmjs.com/package/web-streams-polyfill). - For the full list of changes between web-streams-polyfill v1.3.2 and this version, [visit the fork's changelog](https://github.com/MattiasBuelens/web-streams-polyfill/blob/v0.3.2/CHANGELOG.md). - -* 💥 CommonJS entry points have been moved to `dist/`: - * `index.js` ➡ `dist/polyfill.js` - * `index.es6.js` ➡ `dist/polyfill.es6.js` - - However, we recommend migrating to a [variant sub-package](https://github.com/MattiasBuelens/web-streams-polyfill#usage) instead: - * `require('web-streams-polyfill/index.js')` ➡ `require('web-streams-polyfill')` - * `require('web-streams-polyfill/index.es6.js')` ➡ `require('web-streams-polyfill/es6')` - -* 👓 Align with [spec version `2c8f35e`](https://github.com/whatwg/streams/tree/2c8f35ed23451ffc9b32ec37b56def4a5349abb1/) - -* 🏠 Code moved from [creatorrr/web-streams-polyfill](https://github.com/creatorrr/web-streams-polyfill) to [MattiasBuelens/web-streams-polyfill](https://github.com/MattiasBuelens/web-streams-polyfill) diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es2018.js b/node_modules/web-streams-polyfill/dist/polyfill.es2018.js index 9f2e58f..4e26968 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es2018.js +++ b/node_modules/web-streams-polyfill/dist/polyfill.es2018.js @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -3702,10 +3702,16 @@ const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; - Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3764,10 +3770,16 @@ const countSizeFunction = () => { return 1; }; - Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map b/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map index 78a8eba..1f9d92a 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.es2018.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","exports"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.es2018.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","exports"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js b/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js index 93b31e7..725d242 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js +++ b/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WebStreamsPolyfill={})}(this,(function(e){"use strict";const t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function r(){}const o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function n(e){return"object"==typeof e&&null!==e||"function"==typeof e}const a=r,i=Promise,l=Promise.prototype.then,s=Promise.resolve.bind(i),u=Promise.reject.bind(i);function c(e){return new i(e)}function d(e){return s(e)}function f(e){return u(e)}function b(e,t,r){return l.call(e,t,r)}function _(e,t,r){b(b(e,t,r),void 0,a)}function h(e,t){_(e,t)}function m(e,t){_(e,void 0,t)}function p(e,t,r){return b(e,t,r)}function y(e){b(e,void 0,a)}const g=(()=>{const e=o&&o.queueMicrotask;if("function"==typeof e)return e;const t=d(void 0);return e=>b(t,e)})();function S(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function v(e,t,r){try{return d(S(e,t,r))}catch(e){return f(e)}}class w{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let o=r+1;const n=e._elements,a=n[r];return 16384===o&&(t=e._next,o=0),--this._size,this._cursor=o,e!==t&&(this._front=t),n[r]=void 0,a}forEach(e){let t=this._cursor,r=this._front,o=r._elements;for(;!(t===o.length&&void 0===r._next||t===o.length&&(r=r._next,o=r._elements,t=0,0===o.length));)e(o[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function R(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?q(e):"closed"===t._state?function(e){q(e),O(e)}(e):E(e,t._storedError)}function T(e,t){return br(e._ownerReadableStream,t)}function C(e){"readable"===e._ownerReadableStream._state?W(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){E(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function P(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function q(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function E(e,t){q(e),W(e,t)}function W(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function O(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const B=t("[[AbortSteps]]"),k=t("[[ErrorSteps]]"),j=t("[[CancelSteps]]"),A=t("[[PullSteps]]"),z=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},D=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function L(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(`${t} is not an object.`);var r}function F(e,t){if("function"!=typeof e)throw new TypeError(`${t} is not a function.`)}function I(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(`${t} is not an object.`)}function $(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function M(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function Q(e){return Number(e)}function Y(e){return 0===e?0:e}function x(e,t){const r=Number.MAX_SAFE_INTEGER;let o=Number(e);if(o=Y(o),!z(o))throw new TypeError(`${t} is not a finite number`);if(o=function(e){return Y(D(e))}(o),o<0||o>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return z(o)&&0!==o?o:0}function N(e,t){if(!dr(e))throw new TypeError(`${t} is not a ReadableStream.`)}function H(e){return new ReadableStreamDefaultReader(e)}function V(e,t){e._reader._readRequests.push(t)}function U(e,t,r){const o=e._reader._readRequests.shift();r?o._closeSteps():o._chunkSteps(t)}function G(e){return e._reader._readRequests.length}function X(e){const t=e._reader;return void 0!==t&&!!J(t)}class ReadableStreamDefaultReader{constructor(e){if($(e,1,"ReadableStreamDefaultReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new w}get closed(){return J(this)?this._closedPromise:f(Z("closed"))}cancel(e){return J(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(Z("cancel"))}read(){if(!J(this))return f(Z("read"));if(void 0===this._ownerReadableStream)return f(P("read from"));let e,t;const r=c(((r,o)=>{e=r,t=o}));return K(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!J(this))throw Z("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function J(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof ReadableStreamDefaultReader)}function K(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[A](t)}function Z(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}Object.defineProperties(ReadableStreamDefaultReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultReader.prototype,t.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0});const ee=Object.getPrototypeOf(Object.getPrototypeOf((async function*(){})).prototype);class te{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?p(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?p(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return f(P("iterate"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return K(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,g((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),r(t)}}),o}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return f(P("finish iterating"));if(!this._preventCancel){const r=T(t,e);return C(t),p(r,(()=>({value:e,done:!0})))}return C(t),d({value:e,done:!0})}}const re={next(){return oe(this)?this._asyncIteratorImpl.next():f(ne("next"))},return(e){return oe(this)?this._asyncIteratorImpl.return(e):f(ne("return"))}};function oe(e){if(!n(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof te}catch(e){return!1}}function ne(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==ee&&Object.setPrototypeOf(re,ee);const ae=Number.isNaN||function(e){return e!=e};function ie(e){return e.slice()}function le(e,t,r,o,n){new Uint8Array(e).set(new Uint8Array(r,o,n),t)}function se(e,t,r){if(e.slice)return e.slice(t,r);const o=r-t,n=new ArrayBuffer(o);return le(n,0,e,t,o),n}function ue(e){const t=se(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(t)}function ce(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function de(e,t,r){if("number"!=typeof(o=r)||ae(o)||o<0||r===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var o;e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function fe(e){e._queue=new w,e._queueTotalSize=0}class ReadableStreamBYOBRequest{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!_e(this))throw De("view");return this._view}respond(e){if(!_e(this))throw De("respond");if($(e,1,"respond"),e=x(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,je(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!_e(this))throw De("respondWithNewView");if($(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Ae(this._associatedReadableByteStreamController,e)}}Object.defineProperties(ReadableStreamBYOBRequest.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBRequest.prototype,t.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class ReadableByteStreamController{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!be(this))throw Le("byobRequest");return Be(this)}get desiredSize(){if(!be(this))throw Le("desiredSize");return ke(this)}close(){if(!be(this))throw Le("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);Ee(this)}enqueue(e){if(!be(this))throw Le("enqueue");if($(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);We(this,e)}error(e){if(!be(this))throw Le("error");Oe(this,e)}[j](e){me(this),fe(this);const t=this._cancelAlgorithm(e);return qe(this),t}[A](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,we(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const o={buffer:t,bufferByteLength:r,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(o)}V(t,e),he(this)}}function be(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof ReadableByteStreamController)}function _e(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof ReadableStreamBYOBRequest)}function he(e){if(!function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(X(t)&&G(t)>0)return!0;if(Me(t)&&$e(t)>0)return!0;if(ke(e)>0)return!0;return!1}(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;_(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,he(e))}),(t=>{Oe(e,t)}))}function me(e){Re(e),e._pendingPullIntos=new w}function pe(e,t){let r=!1;"closed"===e._state&&(r=!0);const o=ye(t);"default"===t.readerType?U(e,o,r):function(e,t,r){const o=e._reader._readIntoRequests.shift();r?o._closeSteps(t):o._chunkSteps(t)}(e,o,r)}function ye(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function ge(e,t,r,o){e._queue.push({buffer:t,byteOffset:r,byteLength:o}),e._queueTotalSize+=o}function Se(e,t){const r=t.elementSize,o=t.bytesFilled-t.bytesFilled%r,n=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),a=t.bytesFilled+n,i=a-a%r;let l=n,s=!1;i>o&&(l=i-t.bytesFilled,s=!0);const u=e._queue;for(;l>0;){const r=u.peek(),o=Math.min(l,r.byteLength),n=t.byteOffset+t.bytesFilled;le(t.buffer,n,r.buffer,r.byteOffset,o),r.byteLength===o?u.shift():(r.byteOffset+=o,r.byteLength-=o),e._queueTotalSize-=o,ve(e,o,t),l-=o}return s}function ve(e,t,r){r.bytesFilled+=t}function we(e){0===e._queueTotalSize&&e._closeRequested?(qe(e),_r(e._controlledReadableByteStream)):he(e)}function Re(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Te(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();Se(e,t)&&(Pe(e),pe(e._controlledReadableByteStream,t))}}function Ce(e,t){const r=e._pendingPullIntos.peek();Re(e);"closed"===e._controlledReadableByteStream._state?function(e,t){const r=e._controlledReadableByteStream;if(Me(r))for(;$e(r)>0;)pe(r,Pe(e))}(e):function(e,t,r){if(ve(0,t,r),r.bytesFilled0){const t=r.byteOffset+r.bytesFilled,n=se(r.buffer,t-o,t);ge(e,n,0,n.byteLength)}r.bytesFilled-=o,pe(e._controlledReadableByteStream,r),Te(e)}(e,t,r),he(e)}function Pe(e){return e._pendingPullIntos.shift()}function qe(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Ee(e){const t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Oe(e,t),t}}qe(e),_r(t)}}function We(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const o=t.buffer,n=t.byteOffset,a=t.byteLength,i=o;if(e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek();t.buffer,0,t.buffer=t.buffer}if(Re(e),X(r))if(0===G(r))ge(e,i,n,a);else{e._pendingPullIntos.length>0&&Pe(e);U(r,new Uint8Array(i,n,a),!1)}else Me(r)?(ge(e,i,n,a),Te(e)):ge(e,i,n,a);he(e)}function Oe(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(me(e),fe(e),qe(e),hr(r,t))}function Be(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek(),r=new Uint8Array(t.buffer,t.byteOffset+t.bytesFilled,t.byteLength-t.bytesFilled),o=Object.create(ReadableStreamBYOBRequest.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(o,e,r),e._byobRequest=o}return e._byobRequest}function ke(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function je(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===t)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range")}r.buffer=r.buffer,Ce(e,t)}function Ae(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===t.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.bufferByteLength!==t.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(r.bytesFilled+t.byteLength>r.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");const o=t.byteLength;r.buffer=t.buffer,Ce(e,o)}function ze(e,t,r,o,n,a,i){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,fe(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,t._autoAllocateChunkSize=i,t._pendingPullIntos=new w,e._readableStreamController=t;_(d(r()),(()=>{t._started=!0,he(t)}),(e=>{Oe(t,e)}))}function De(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function Le(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function Fe(e){return new ReadableStreamBYOBReader(e)}function Ie(e,t){e._reader._readIntoRequests.push(t)}function $e(e){return e._reader._readIntoRequests.length}function Me(e){const t=e._reader;return void 0!==t&&!!Qe(t)}Object.defineProperties(ReadableByteStreamController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableByteStreamController.prototype,t.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class ReadableStreamBYOBReader{constructor(e){if($(e,1,"ReadableStreamBYOBReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!be(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new w}get closed(){return Qe(this)?this._closedPromise:f(xe("closed"))}cancel(e){return Qe(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(xe("cancel"))}read(e){if(!Qe(this))return f(xe("read"));if(!ArrayBuffer.isView(e))return f(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return f(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return f(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return f(P("read from"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return Ye(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),o}releaseLock(){if(!Qe(this))throw xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function Qe(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof ReadableStreamBYOBReader)}function Ye(e,t,r){const o=e._ownerReadableStream;o._disturbed=!0,"errored"===o._state?r._errorSteps(o._storedError):function(e,t,r){const o=e._controlledReadableByteStream;let n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);const a=t.constructor,i=t.buffer,l={buffer:i,bufferByteLength:i.byteLength,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(l),void Ie(o,r);if("closed"!==o._state){if(e._queueTotalSize>0){if(Se(e,l)){const t=ye(l);return we(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return Oe(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(l),Ie(o,r),he(e)}else{const e=new a(l.buffer,l.byteOffset,0);r._closeSteps(e)}}(o._readableStreamController,t,r)}function xe(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function Ne(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(ae(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function He(e){const{size:t}=e;return t||(()=>1)}function Ve(e,t){L(e,t);const r=null==e?void 0:e.highWaterMark,o=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:Q(r),size:void 0===o?void 0:Ue(o,`${t} has member 'size' that`)}}function Ue(e,t){return F(e,t),t=>Q(e(t))}function Ge(e,t,r){return F(e,r),r=>v(e,t,[r])}function Xe(e,t,r){return F(e,r),()=>v(e,t,[])}function Je(e,t,r){return F(e,r),r=>S(e,t,[r])}function Ke(e,t,r){return F(e,r),(r,o)=>v(e,t,[r,o])}function Ze(e,t){if(!ot(e))throw new TypeError(`${t} is not a WritableStream.`)}Object.defineProperties(ReadableStreamBYOBReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBReader.prototype,t.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});const et="function"==typeof AbortController;class WritableStream{constructor(e={},t={}){void 0===e?e=null:I(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){L(e,t);const r=null==e?void 0:e.abort,o=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===r?void 0:Ge(r,e,`${t} has member 'abort' that`),close:void 0===o?void 0:Xe(o,e,`${t} has member 'close' that`),start:void 0===n?void 0:Je(n,e,`${t} has member 'start' that`),write:void 0===i?void 0:Ke(i,e,`${t} has member 'write' that`),type:a}}(e,"First parameter");rt(this);if(void 0!==o.type)throw new RangeError("Invalid type is specified");const n=He(r);!function(e,t,r,o){const n=Object.create(WritableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0),s=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n));void 0!==t.write&&(i=e=>t.write(e,n));void 0!==t.close&&(l=()=>t.close());void 0!==t.abort&&(s=e=>t.abort(e));vt(e,n,a,i,l,s,r,o)}(this,o,Ne(r,1),n)}get locked(){if(!ot(this))throw Et("locked");return nt(this)}abort(e){return ot(this)?nt(this)?f(new TypeError("Cannot abort a stream that already has a writer")):at(this,e):f(Et("abort"))}close(){return ot(this)?nt(this)?f(new TypeError("Cannot close a stream that already has a writer")):ct(this)?f(new TypeError("Cannot close an already-closing stream")):it(this):f(Et("close"))}getWriter(){if(!ot(this))throw Et("getWriter");return tt(this)}}function tt(e){return new WritableStreamDefaultWriter(e)}function rt(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new w,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function ot(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof WritableStream)}function nt(e){return void 0!==e._writer}function at(e,t){var r;if("closed"===e._state||"errored"===e._state)return d(void 0);e._writableStreamController._abortReason=t,null===(r=e._writableStreamController._abortController)||void 0===r||r.abort();const o=e._state;if("closed"===o||"errored"===o)return d(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let n=!1;"erroring"===o&&(n=!0,t=void 0);const a=c(((r,o)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:o,_reason:t,_wasAlreadyErroring:n}}));return e._pendingAbortRequest._promise=a,n||st(e,t),a}function it(e){const t=e._state;if("closed"===t||"errored"===t)return f(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=c(((t,r)=>{const o={_resolve:t,_reject:r};e._closeRequest=o})),o=e._writer;var n;return void 0!==o&&e._backpressure&&"writable"===t&&$t(o),de(n=e._writableStreamController,gt,0),Tt(n),r}function lt(e,t){"writable"!==e._state?ut(e):st(e,t)}function st(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const o=e._writer;void 0!==o&&mt(o,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&&ut(e)}function ut(e){e._state="errored",e._writableStreamController[k]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new w,void 0===e._pendingAbortRequest)return void dt(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void dt(e);_(e._writableStreamController[B](r._reason),(()=>{r._resolve(),dt(e)}),(t=>{r._reject(t),dt(e)}))}function ct(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function dt(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&At(t,e._storedError)}function ft(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){Dt(e)}(r):$t(r)),e._backpressure=t}Object.defineProperties(WritableStream.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStream.prototype,t.toStringTag,{value:"WritableStream",configurable:!0});class WritableStreamDefaultWriter{constructor(e){if($(e,1,"WritableStreamDefaultWriter"),Ze(e,"First parameter"),nt(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!ct(e)&&e._backpressure?Dt(this):Ft(this),kt(this);else if("erroring"===t)Lt(this,e._storedError),kt(this);else if("closed"===t)Ft(this),kt(r=this),zt(r);else{const t=e._storedError;Lt(this,t),jt(this,t)}var r}get closed(){return bt(this)?this._closedPromise:f(Ot("closed"))}get desiredSize(){if(!bt(this))throw Ot("desiredSize");if(void 0===this._ownerWritableStream)throw Bt("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Rt(t._writableStreamController)}(this)}get ready(){return bt(this)?this._readyPromise:f(Ot("ready"))}abort(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("abort")):function(e,t){return at(e._ownerWritableStream,t)}(this,e):f(Ot("abort"))}close(){if(!bt(this))return f(Ot("close"));const e=this._ownerWritableStream;return void 0===e?f(Bt("close")):ct(e)?f(new TypeError("Cannot close an already-closing stream")):_t(this)}releaseLock(){if(!bt(this))throw Ot("releaseLock");void 0!==this._ownerWritableStream&&pt(this)}write(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("write to")):yt(this,e):f(Ot("write"))}}function bt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof WritableStreamDefaultWriter)}function _t(e){return it(e._ownerWritableStream)}function ht(e,t){"pending"===e._closedPromiseState?At(e,t):function(e,t){jt(e,t)}(e,t)}function mt(e,t){"pending"===e._readyPromiseState?It(e,t):function(e,t){Lt(e,t)}(e,t)}function pt(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");mt(e,r),ht(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function yt(e,t){const r=e._ownerWritableStream,o=r._writableStreamController,n=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Ct(e,t),1}}(o,t);if(r!==e._ownerWritableStream)return f(Bt("write to"));const a=r._state;if("errored"===a)return f(r._storedError);if(ct(r)||"closed"===a)return f(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return f(r._storedError);const i=function(e){return c(((t,r)=>{const o={_resolve:t,_reject:r};e._writeRequests.push(o)}))}(r);return function(e,t,r){try{de(e,t,r)}catch(t){return void Ct(e,t)}const o=e._controlledWritableStream;if(!ct(o)&&"writable"===o._state){ft(o,Pt(e))}Tt(e)}(o,t,n),i}Object.defineProperties(WritableStreamDefaultWriter.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultWriter.prototype,t.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const gt={};class WritableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!St(this))throw Wt("abortReason");return this._abortReason}get signal(){if(!St(this))throw Wt("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(e){if(!St(this))throw Wt("error");"writable"===this._controlledWritableStream._state&&qt(this,e)}[B](e){const t=this._abortAlgorithm(e);return wt(this),t}[k](){fe(this)}}function St(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof WritableStreamDefaultController)}function vt(e,t,r,o,n,a,i,l){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._abortReason=void 0,t._abortController=function(){if(et)return new AbortController}(),t._started=!1,t._strategySizeAlgorithm=l,t._strategyHWM=i,t._writeAlgorithm=o,t._closeAlgorithm=n,t._abortAlgorithm=a;const s=Pt(t);ft(e,s);_(d(r()),(()=>{t._started=!0,Tt(t)}),(r=>{t._started=!0,lt(e,r)}))}function wt(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Rt(e){return e._strategyHWM-e._queueTotalSize}function Tt(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void ut(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===gt?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),ce(e);const r=e._closeAlgorithm();wt(e),_(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&zt(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),lt(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);_(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(ce(e),!ct(r)&&"writable"===t){const t=Pt(e);ft(r,t)}Tt(e)}),(t=>{"writable"===r._state&&wt(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,lt(e,t)}(r,t)}))}(e,r)}function Ct(e,t){"writable"===e._controlledWritableStream._state&&qt(e,t)}function Pt(e){return Rt(e)<=0}function qt(e,t){const r=e._controlledWritableStream;wt(e),st(r,t)}function Et(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Wt(e){return new TypeError(`WritableStreamDefaultController.prototype.${e} can only be used on a WritableStreamDefaultController`)}function Ot(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function Bt(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function kt(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function jt(e,t){kt(e),At(e,t)}function At(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function zt(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Dt(e){e._readyPromise=c(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function Lt(e,t){Dt(e),It(e,t)}function Ft(e){Dt(e),$t(e)}function It(e,t){void 0!==e._readyPromise_reject&&(y(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function $t(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(WritableStreamDefaultController.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultController.prototype,t.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const Mt="undefined"!=typeof DOMException?DOMException:void 0;const Qt=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Mt)?Mt:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return e.prototype=Object.create(Error.prototype),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,configurable:!0}),e}();function Yt(e,t,o,n,a,i){const l=H(e),s=tt(t);e._disturbed=!0;let u=!1,p=d(void 0);return c(((g,S)=>{let v;if(void 0!==i){if(v=()=>{const r=new Qt("Aborted","AbortError"),o=[];n||o.push((()=>"writable"===t._state?at(t,r):d(void 0))),a||o.push((()=>"readable"===e._state?br(e,r):d(void 0))),E((()=>Promise.all(o.map((e=>e())))),!0,r)},i.aborted)return void v();i.addEventListener("abort",v)}var w,R,T;if(q(e,l._closedPromise,(e=>{n?W(!0,e):E((()=>at(t,e)),!0,e)})),q(t,s._closedPromise,(t=>{a?W(!0,t):E((()=>br(e,t)),!0,t)})),w=e,R=l._closedPromise,T=()=>{o?W():E((()=>function(e){const t=e._ownerWritableStream,r=t._state;return ct(t)||"closed"===r?d(void 0):"errored"===r?f(t._storedError):_t(e)}(s)))},"closed"===w._state?T():h(R,T),ct(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");a?W(!0,t):E((()=>br(e,t)),!0,t)}function P(){const e=p;return b(p,(()=>e!==p?P():void 0))}function q(e,t,r){"errored"===e._state?r(e._storedError):m(t,r)}function E(e,r,o){function n(){_(e(),(()=>O(r,o)),(e=>O(!0,e)))}u||(u=!0,"writable"!==t._state||ct(t)?n():h(P(),n))}function W(e,r){u||(u=!0,"writable"!==t._state||ct(t)?O(e,r):h(P(),(()=>O(e,r))))}function O(e,t){pt(s),C(l),void 0!==i&&i.removeEventListener("abort",v),e?S(t):g(void 0)}y(c(((e,t)=>{!function o(n){n?e():b(u?d(!0):b(s._readyPromise,(()=>c(((e,t)=>{K(l,{_chunkSteps:t=>{p=b(yt(s,t),void 0,r),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),o,t)}(!1)})))}))}class ReadableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!xt(this))throw er("desiredSize");return Jt(this)}close(){if(!xt(this))throw er("close");if(!Kt(this))throw new TypeError("The stream is not in a state that permits close");Ut(this)}enqueue(e){if(!xt(this))throw er("enqueue");if(!Kt(this))throw new TypeError("The stream is not in a state that permits enqueue");return Gt(this,e)}error(e){if(!xt(this))throw er("error");Xt(this,e)}[j](e){fe(this);const t=this._cancelAlgorithm(e);return Vt(this),t}[A](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=ce(this);this._closeRequested&&0===this._queue.length?(Vt(this),_r(t)):Nt(this),e._chunkSteps(r)}else V(t,e),Nt(this)}}function xt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof ReadableStreamDefaultController)}function Nt(e){if(!Ht(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;_(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,Nt(e))}),(t=>{Xt(e,t)}))}function Ht(e){const t=e._controlledReadableStream;if(!Kt(e))return!1;if(!e._started)return!1;if(fr(t)&&G(t)>0)return!0;return Jt(e)>0}function Vt(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Ut(e){if(!Kt(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(Vt(e),_r(t))}function Gt(e,t){if(!Kt(e))return;const r=e._controlledReadableStream;if(fr(r)&&G(r)>0)U(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw Xt(e,t),t}try{de(e,t,r)}catch(t){throw Xt(e,t),t}}Nt(e)}function Xt(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(fe(e),Vt(e),hr(r,t))}function Jt(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Kt(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function Zt(e,t,r,o,n,a,i){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=i,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,e._readableStreamController=t;_(d(r()),(()=>{t._started=!0,Nt(t)}),(e=>{Xt(t,e)}))}function er(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function tr(e,t){return be(e._readableStreamController)?function(e){let t,r,o,n,a,i=H(e),l=!1,s=!1,u=!1,f=!1,b=!1;const _=c((e=>{a=e}));function h(e){m(e._closedPromise,(t=>{e===i&&(Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),f&&b||a(void 0))}))}function p(){Qe(i)&&(C(i),i=H(e),h(i));K(i,{_chunkSteps:t=>{g((()=>{s=!1,u=!1;const r=t;let i=t;if(!f&&!b)try{i=ue(t)}catch(t){return Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),void a(br(e,t))}f||We(o._readableStreamController,r),b||We(n._readableStreamController,i),l=!1,s?S():u&&v()}))},_closeSteps:()=>{l=!1,f||Ee(o._readableStreamController),b||Ee(n._readableStreamController),o._readableStreamController._pendingPullIntos.length>0&&je(o._readableStreamController,0),n._readableStreamController._pendingPullIntos.length>0&&je(n._readableStreamController,0),f&&b||a(void 0)},_errorSteps:()=>{l=!1}})}function y(t,r){J(i)&&(C(i),i=Fe(e),h(i));const c=r?n:o,d=r?o:n;Ye(i,t,{_chunkSteps:t=>{g((()=>{s=!1,u=!1;const o=r?b:f;if(r?f:b)o||Ae(c._readableStreamController,t);else{let r;try{r=ue(t)}catch(t){return Oe(c._readableStreamController,t),Oe(d._readableStreamController,t),void a(br(e,t))}o||Ae(c._readableStreamController,t),We(d._readableStreamController,r)}l=!1,s?S():u&&v()}))},_closeSteps:e=>{l=!1;const t=r?b:f,o=r?f:b;t||Ee(c._readableStreamController),o||Ee(d._readableStreamController),void 0!==e&&(t||Ae(c._readableStreamController,e),!o&&d._readableStreamController._pendingPullIntos.length>0&&je(d._readableStreamController,0)),t&&o||a(void 0)},_errorSteps:()=>{l=!1}})}function S(){if(l)return s=!0,d(void 0);l=!0;const e=Be(o._readableStreamController);return null===e?p():y(e._view,!1),d(void 0)}function v(){if(l)return u=!0,d(void 0);l=!0;const e=Be(n._readableStreamController);return null===e?p():y(e._view,!0),d(void 0)}function w(o){if(f=!0,t=o,b){const o=ie([t,r]),n=br(e,o);a(n)}return _}function R(o){if(b=!0,r=o,f){const o=ie([t,r]),n=br(e,o);a(n)}return _}function T(){}return o=ur(T,S,w),n=ur(T,v,R),h(i),[o,n]}(e):function(e,t){const r=H(e);let o,n,a,i,l,s=!1,u=!1,f=!1,b=!1;const _=c((e=>{l=e}));function h(){if(s)return u=!0,d(void 0);s=!0;return K(r,{_chunkSteps:e=>{g((()=>{u=!1;const t=e,r=e;f||Gt(a._readableStreamController,t),b||Gt(i._readableStreamController,r),s=!1,u&&h()}))},_closeSteps:()=>{s=!1,f||Ut(a._readableStreamController),b||Ut(i._readableStreamController),f&&b||l(void 0)},_errorSteps:()=>{s=!1}}),d(void 0)}function p(t){if(f=!0,o=t,b){const t=ie([o,n]),r=br(e,t);l(r)}return _}function y(t){if(b=!0,n=t,f){const t=ie([o,n]),r=br(e,t);l(r)}return _}function S(){}return a=sr(S,h,p),i=sr(S,h,y),m(r._closedPromise,(e=>{Xt(a._readableStreamController,e),Xt(i._readableStreamController,e),f&&b||l(void 0)})),[a,i]}(e)}function rr(e,t,r){return F(e,r),r=>v(e,t,[r])}function or(e,t,r){return F(e,r),r=>v(e,t,[r])}function nr(e,t,r){return F(e,r),r=>S(e,t,[r])}function ar(e,t){if("bytes"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function ir(e,t){if("byob"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function lr(e,t){L(e,t);const r=null==e?void 0:e.preventAbort,o=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(`${t} is not an AbortSignal.`)}(a,`${t} has member 'signal' that`),{preventAbort:Boolean(r),preventCancel:Boolean(o),preventClose:Boolean(n),signal:a}}Object.defineProperties(ReadableStreamDefaultController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultController.prototype,t.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class ReadableStream{constructor(e={},t={}){void 0===e?e=null:I(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){L(e,t);const r=e,o=null==r?void 0:r.autoAllocateChunkSize,n=null==r?void 0:r.cancel,a=null==r?void 0:r.pull,i=null==r?void 0:r.start,l=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===o?void 0:x(o,`${t} has member 'autoAllocateChunkSize' that`),cancel:void 0===n?void 0:rr(n,r,`${t} has member 'cancel' that`),pull:void 0===a?void 0:or(a,r,`${t} has member 'pull' that`),start:void 0===i?void 0:nr(i,r,`${t} has member 'start' that`),type:void 0===l?void 0:ar(l,`${t} has member 'type' that`)}}(e,"First parameter");if(cr(this),"bytes"===o.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,t,r){const o=Object.create(ReadableByteStreamController.prototype);let n=()=>{},a=()=>d(void 0),i=()=>d(void 0);void 0!==t.start&&(n=()=>t.start(o)),void 0!==t.pull&&(a=()=>t.pull(o)),void 0!==t.cancel&&(i=e=>t.cancel(e));const l=t.autoAllocateChunkSize;if(0===l)throw new TypeError("autoAllocateChunkSize must be greater than 0");ze(e,o,n,a,i,r,l)}(this,o,Ne(r,0))}else{const e=He(r);!function(e,t,r,o){const n=Object.create(ReadableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n)),void 0!==t.pull&&(i=()=>t.pull(n)),void 0!==t.cancel&&(l=e=>t.cancel(e)),Zt(e,n,a,i,l,r,o)}(this,o,Ne(r,1),e)}}get locked(){if(!dr(this))throw mr("locked");return fr(this)}cancel(e){return dr(this)?fr(this)?f(new TypeError("Cannot cancel a stream that already has a reader")):br(this,e):f(mr("cancel"))}getReader(e){if(!dr(this))throw mr("getReader");return void 0===function(e,t){L(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:ir(r,`${t} has member 'mode' that`)}}(e,"First parameter").mode?H(this):Fe(this)}pipeThrough(e,t={}){if(!dr(this))throw mr("pipeThrough");$(e,1,"pipeThrough");const r=function(e,t){L(e,t);const r=null==e?void 0:e.readable;M(r,"readable","ReadableWritablePair"),N(r,`${t} has member 'readable' that`);const o=null==e?void 0:e.writable;return M(o,"writable","ReadableWritablePair"),Ze(o,`${t} has member 'writable' that`),{readable:r,writable:o}}(e,"First parameter"),o=lr(t,"Second parameter");if(fr(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(nt(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return y(Yt(this,r.writable,o.preventClose,o.preventAbort,o.preventCancel,o.signal)),r.readable}pipeTo(e,t={}){if(!dr(this))return f(mr("pipeTo"));if(void 0===e)return f("Parameter 1 is required in 'pipeTo'.");if(!ot(e))return f(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=lr(t,"Second parameter")}catch(e){return f(e)}return fr(this)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):nt(e)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Yt(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!dr(this))throw mr("tee");return ie(tr(this))}values(e){if(!dr(this))throw mr("values");return function(e,t){const r=H(e),o=new te(r,t),n=Object.create(re);return n._asyncIteratorImpl=o,n}(this,function(e,t){L(e,t);const r=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(r)}}(e,"First parameter").preventCancel)}}function sr(e,t,r,o=1,n=(()=>1)){const a=Object.create(ReadableStream.prototype);cr(a);return Zt(a,Object.create(ReadableStreamDefaultController.prototype),e,t,r,o,n),a}function ur(e,t,r){const o=Object.create(ReadableStream.prototype);cr(o);return ze(o,Object.create(ReadableByteStreamController.prototype),e,t,r,0,void 0),o}function cr(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function dr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof ReadableStream)}function fr(e){return void 0!==e._reader}function br(e,t){if(e._disturbed=!0,"closed"===e._state)return d(void 0);if("errored"===e._state)return f(e._storedError);_r(e);const o=e._reader;void 0!==o&&Qe(o)&&(o._readIntoRequests.forEach((e=>{e._closeSteps(void 0)})),o._readIntoRequests=new w);return p(e._readableStreamController[j](t),r)}function _r(e){e._state="closed";const t=e._reader;void 0!==t&&(O(t),J(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new w))}function hr(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(W(r,t),J(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new w):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new w))}function mr(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function pr(e,t){L(e,t);const r=null==e?void 0:e.highWaterMark;return M(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Q(r)}}Object.defineProperties(ReadableStream.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStream.prototype,t.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof t.asyncIterator&&Object.defineProperty(ReadableStream.prototype,t.asyncIterator,{value:ReadableStream.prototype.values,writable:!0,configurable:!0});const yr=e=>e.byteLength;Object.defineProperty(yr,"name",{value:"size",configurable:!0});class ByteLengthQueuingStrategy{constructor(e){$(e,1,"ByteLengthQueuingStrategy"),e=pr(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Sr(this))throw gr("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!Sr(this))throw gr("size");return yr}}function gr(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function Sr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof ByteLengthQueuingStrategy)}Object.defineProperties(ByteLengthQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ByteLengthQueuingStrategy.prototype,t.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const vr=()=>1;Object.defineProperty(vr,"name",{value:"size",configurable:!0});class CountQueuingStrategy{constructor(e){$(e,1,"CountQueuingStrategy"),e=pr(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Rr(this))throw wr("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Rr(this))throw wr("size");return vr}}function wr(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Rr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof CountQueuingStrategy)}function Tr(e,t,r){return F(e,r),r=>v(e,t,[r])}function Cr(e,t,r){return F(e,r),r=>S(e,t,[r])}function Pr(e,t,r){return F(e,r),(r,o)=>v(e,t,[r,o])}Object.defineProperties(CountQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(CountQueuingStrategy.prototype,t.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class TransformStream{constructor(e={},t={},r={}){void 0===e&&(e=null);const o=Ve(t,"Second parameter"),n=Ve(r,"Third parameter"),a=function(e,t){L(e,t);const r=null==e?void 0:e.flush,o=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Tr(r,e,`${t} has member 'flush' that`),readableType:o,start:void 0===n?void 0:Cr(n,e,`${t} has member 'start' that`),transform:void 0===a?void 0:Pr(a,e,`${t} has member 'transform' that`),writableType:i}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");const i=Ne(n,0),l=He(n),s=Ne(o,1),u=He(o);let b;!function(e,t,r,o,n,a){function i(){return t}function l(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return p(e._backpressureChangePromise,(()=>{const o=e._writable;if("erroring"===o._state)throw o._storedError;return Ar(r,t)}))}return Ar(r,t)}(e,t)}function s(t){return function(e,t){return Er(e,t),d(void 0)}(e,t)}function u(){return function(e){const t=e._readable,r=e._transformStreamController,o=r._flushAlgorithm();return kr(r),p(o,(()=>{if("errored"===t._state)throw t._storedError;Ut(t._readableStreamController)}),(r=>{throw Er(e,r),t._storedError}))}(e)}function c(){return function(e){return Or(e,!1),e._backpressureChangePromise}(e)}function f(t){return Wr(e,t),d(void 0)}e._writable=function(e,t,r,o,n=1,a=(()=>1)){const i=Object.create(WritableStream.prototype);return rt(i),vt(i,Object.create(WritableStreamDefaultController.prototype),e,t,r,o,n,a),i}(i,l,u,s,r,o),e._readable=sr(i,c,f,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Or(e,!0),e._transformStreamController=void 0}(this,c((e=>{b=e})),s,u,i,l),function(e,t){const r=Object.create(TransformStreamDefaultController.prototype);let o=e=>{try{return jr(r,e),d(void 0)}catch(e){return f(e)}},n=()=>d(void 0);void 0!==t.transform&&(o=e=>t.transform(e,r));void 0!==t.flush&&(n=()=>t.flush(r));!function(e,t,r,o){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=o}(e,r,o,n)}(this,a),void 0!==a.start?b(a.start(this._transformStreamController)):b(void 0)}get readable(){if(!qr(this))throw Dr("readable");return this._readable}get writable(){if(!qr(this))throw Dr("writable");return this._writable}}function qr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof TransformStream)}function Er(e,t){Xt(e._readable._readableStreamController,t),Wr(e,t)}function Wr(e,t){kr(e._transformStreamController),Ct(e._writable._writableStreamController,t),e._backpressure&&Or(e,!1)}function Or(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=c((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(TransformStream.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStream.prototype,t.toStringTag,{value:"TransformStream",configurable:!0});class TransformStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Br(this))throw zr("desiredSize");return Jt(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!Br(this))throw zr("enqueue");jr(this,e)}error(e){if(!Br(this))throw zr("error");var t;t=e,Er(this._controlledTransformStream,t)}terminate(){if(!Br(this))throw zr("terminate");!function(e){const t=e._controlledTransformStream;Ut(t._readable._readableStreamController);const r=new TypeError("TransformStream terminated");Wr(t,r)}(this)}}function Br(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof TransformStreamDefaultController)}function kr(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function jr(e,t){const r=e._controlledTransformStream,o=r._readable._readableStreamController;if(!Kt(o))throw new TypeError("Readable side is not in a state that permits enqueue");try{Gt(o,t)}catch(e){throw Wr(r,e),r._readable._storedError}(function(e){return!Ht(e)})(o)!==r._backpressure&&Or(r,!0)}function Ar(e,t){return p(e._transformAlgorithm(t),void 0,(t=>{throw Er(e._controlledTransformStream,t),t}))}function zr(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function Dr(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(TransformStreamDefaultController.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStreamDefaultController.prototype,t.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});const Lr={ReadableStream:ReadableStream,ReadableStreamDefaultController:ReadableStreamDefaultController,ReadableByteStreamController:ReadableByteStreamController,ReadableStreamBYOBRequest:ReadableStreamBYOBRequest,ReadableStreamDefaultReader:ReadableStreamDefaultReader,ReadableStreamBYOBReader:ReadableStreamBYOBReader,WritableStream:WritableStream,WritableStreamDefaultController:WritableStreamDefaultController,WritableStreamDefaultWriter:WritableStreamDefaultWriter,ByteLengthQueuingStrategy:ByteLengthQueuingStrategy,CountQueuingStrategy:CountQueuingStrategy,TransformStream:TransformStream,TransformStreamDefaultController:TransformStreamDefaultController};if(void 0!==o)for(const e in Lr)Object.prototype.hasOwnProperty.call(Lr,e)&&Object.defineProperty(o,e,{value:Lr[e],writable:!0,configurable:!0});e.ByteLengthQueuingStrategy=ByteLengthQueuingStrategy,e.CountQueuingStrategy=CountQueuingStrategy,e.ReadableByteStreamController=ReadableByteStreamController,e.ReadableStream=ReadableStream,e.ReadableStreamBYOBReader=ReadableStreamBYOBReader,e.ReadableStreamBYOBRequest=ReadableStreamBYOBRequest,e.ReadableStreamDefaultController=ReadableStreamDefaultController,e.ReadableStreamDefaultReader=ReadableStreamDefaultReader,e.TransformStream=TransformStream,e.TransformStreamDefaultController=TransformStreamDefaultController,e.WritableStream=WritableStream,e.WritableStreamDefaultController=WritableStreamDefaultController,e.WritableStreamDefaultWriter=WritableStreamDefaultWriter,Object.defineProperty(e,"__esModule",{value:!0})})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WebStreamsPolyfill={})}(this,(function(e){"use strict";const t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function r(){}const o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function n(e){return"object"==typeof e&&null!==e||"function"==typeof e}const a=r,i=Promise,l=Promise.prototype.then,s=Promise.resolve.bind(i),u=Promise.reject.bind(i);function c(e){return new i(e)}function d(e){return s(e)}function f(e){return u(e)}function b(e,t,r){return l.call(e,t,r)}function h(e,t,r){b(b(e,t,r),void 0,a)}function _(e,t){h(e,t)}function m(e,t){h(e,void 0,t)}function p(e,t,r){return b(e,t,r)}function y(e){b(e,void 0,a)}const g=(()=>{const e=o&&o.queueMicrotask;if("function"==typeof e)return e;const t=d(void 0);return e=>b(t,e)})();function S(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function v(e,t,r){try{return d(S(e,t,r))}catch(e){return f(e)}}class w{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let o=r+1;const n=e._elements,a=n[r];return 16384===o&&(t=e._next,o=0),--this._size,this._cursor=o,e!==t&&(this._front=t),n[r]=void 0,a}forEach(e){let t=this._cursor,r=this._front,o=r._elements;for(;!(t===o.length&&void 0===r._next||t===o.length&&(r=r._next,o=r._elements,t=0,0===o.length));)e(o[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function R(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?q(e):"closed"===t._state?function(e){q(e),O(e)}(e):E(e,t._storedError)}function T(e,t){return br(e._ownerReadableStream,t)}function C(e){"readable"===e._ownerReadableStream._state?W(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){E(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function P(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function q(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function E(e,t){q(e),W(e,t)}function W(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function O(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const B=t("[[AbortSteps]]"),k=t("[[ErrorSteps]]"),j=t("[[CancelSteps]]"),A=t("[[PullSteps]]"),z=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},D=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function L(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(`${t} is not an object.`);var r}function F(e,t){if("function"!=typeof e)throw new TypeError(`${t} is not a function.`)}function I(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(`${t} is not an object.`)}function $(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function M(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function Q(e){return Number(e)}function Y(e){return 0===e?0:e}function x(e,t){const r=Number.MAX_SAFE_INTEGER;let o=Number(e);if(o=Y(o),!z(o))throw new TypeError(`${t} is not a finite number`);if(o=function(e){return Y(D(e))}(o),o<0||o>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return z(o)&&0!==o?o:0}function N(e,t){if(!dr(e))throw new TypeError(`${t} is not a ReadableStream.`)}function H(e){return new ReadableStreamDefaultReader(e)}function V(e,t){e._reader._readRequests.push(t)}function U(e,t,r){const o=e._reader._readRequests.shift();r?o._closeSteps():o._chunkSteps(t)}function G(e){return e._reader._readRequests.length}function X(e){const t=e._reader;return void 0!==t&&!!J(t)}class ReadableStreamDefaultReader{constructor(e){if($(e,1,"ReadableStreamDefaultReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new w}get closed(){return J(this)?this._closedPromise:f(Z("closed"))}cancel(e){return J(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(Z("cancel"))}read(){if(!J(this))return f(Z("read"));if(void 0===this._ownerReadableStream)return f(P("read from"));let e,t;const r=c(((r,o)=>{e=r,t=o}));return K(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!J(this))throw Z("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function J(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof ReadableStreamDefaultReader)}function K(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[A](t)}function Z(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}Object.defineProperties(ReadableStreamDefaultReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultReader.prototype,t.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0});const ee=Object.getPrototypeOf(Object.getPrototypeOf((async function*(){})).prototype);class te{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?p(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?p(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return f(P("iterate"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return K(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,g((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),r(t)}}),o}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return f(P("finish iterating"));if(!this._preventCancel){const r=T(t,e);return C(t),p(r,(()=>({value:e,done:!0})))}return C(t),d({value:e,done:!0})}}const re={next(){return oe(this)?this._asyncIteratorImpl.next():f(ne("next"))},return(e){return oe(this)?this._asyncIteratorImpl.return(e):f(ne("return"))}};function oe(e){if(!n(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof te}catch(e){return!1}}function ne(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==ee&&Object.setPrototypeOf(re,ee);const ae=Number.isNaN||function(e){return e!=e};function ie(e){return e.slice()}function le(e,t,r,o,n){new Uint8Array(e).set(new Uint8Array(r,o,n),t)}function se(e,t,r){if(e.slice)return e.slice(t,r);const o=r-t,n=new ArrayBuffer(o);return le(n,0,e,t,o),n}function ue(e){const t=se(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(t)}function ce(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function de(e,t,r){if("number"!=typeof(o=r)||ae(o)||o<0||r===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var o;e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function fe(e){e._queue=new w,e._queueTotalSize=0}class ReadableStreamBYOBRequest{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!he(this))throw De("view");return this._view}respond(e){if(!he(this))throw De("respond");if($(e,1,"respond"),e=x(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,je(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!he(this))throw De("respondWithNewView");if($(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Ae(this._associatedReadableByteStreamController,e)}}Object.defineProperties(ReadableStreamBYOBRequest.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBRequest.prototype,t.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class ReadableByteStreamController{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!be(this))throw Le("byobRequest");return Be(this)}get desiredSize(){if(!be(this))throw Le("desiredSize");return ke(this)}close(){if(!be(this))throw Le("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);Ee(this)}enqueue(e){if(!be(this))throw Le("enqueue");if($(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);We(this,e)}error(e){if(!be(this))throw Le("error");Oe(this,e)}[j](e){me(this),fe(this);const t=this._cancelAlgorithm(e);return qe(this),t}[A](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,we(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const o={buffer:t,bufferByteLength:r,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(o)}V(t,e),_e(this)}}function be(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof ReadableByteStreamController)}function he(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof ReadableStreamBYOBRequest)}function _e(e){if(!function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(X(t)&&G(t)>0)return!0;if(Me(t)&&$e(t)>0)return!0;if(ke(e)>0)return!0;return!1}(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;h(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,_e(e))}),(t=>{Oe(e,t)}))}function me(e){Re(e),e._pendingPullIntos=new w}function pe(e,t){let r=!1;"closed"===e._state&&(r=!0);const o=ye(t);"default"===t.readerType?U(e,o,r):function(e,t,r){const o=e._reader._readIntoRequests.shift();r?o._closeSteps(t):o._chunkSteps(t)}(e,o,r)}function ye(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function ge(e,t,r,o){e._queue.push({buffer:t,byteOffset:r,byteLength:o}),e._queueTotalSize+=o}function Se(e,t){const r=t.elementSize,o=t.bytesFilled-t.bytesFilled%r,n=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),a=t.bytesFilled+n,i=a-a%r;let l=n,s=!1;i>o&&(l=i-t.bytesFilled,s=!0);const u=e._queue;for(;l>0;){const r=u.peek(),o=Math.min(l,r.byteLength),n=t.byteOffset+t.bytesFilled;le(t.buffer,n,r.buffer,r.byteOffset,o),r.byteLength===o?u.shift():(r.byteOffset+=o,r.byteLength-=o),e._queueTotalSize-=o,ve(e,o,t),l-=o}return s}function ve(e,t,r){r.bytesFilled+=t}function we(e){0===e._queueTotalSize&&e._closeRequested?(qe(e),hr(e._controlledReadableByteStream)):_e(e)}function Re(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Te(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();Se(e,t)&&(Pe(e),pe(e._controlledReadableByteStream,t))}}function Ce(e,t){const r=e._pendingPullIntos.peek();Re(e);"closed"===e._controlledReadableByteStream._state?function(e,t){const r=e._controlledReadableByteStream;if(Me(r))for(;$e(r)>0;)pe(r,Pe(e))}(e):function(e,t,r){if(ve(0,t,r),r.bytesFilled0){const t=r.byteOffset+r.bytesFilled,n=se(r.buffer,t-o,t);ge(e,n,0,n.byteLength)}r.bytesFilled-=o,pe(e._controlledReadableByteStream,r),Te(e)}(e,t,r),_e(e)}function Pe(e){return e._pendingPullIntos.shift()}function qe(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Ee(e){const t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Oe(e,t),t}}qe(e),hr(t)}}function We(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const o=t.buffer,n=t.byteOffset,a=t.byteLength,i=o;if(e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek();t.buffer,0,t.buffer=t.buffer}if(Re(e),X(r))if(0===G(r))ge(e,i,n,a);else{e._pendingPullIntos.length>0&&Pe(e);U(r,new Uint8Array(i,n,a),!1)}else Me(r)?(ge(e,i,n,a),Te(e)):ge(e,i,n,a);_e(e)}function Oe(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(me(e),fe(e),qe(e),_r(r,t))}function Be(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek(),r=new Uint8Array(t.buffer,t.byteOffset+t.bytesFilled,t.byteLength-t.bytesFilled),o=Object.create(ReadableStreamBYOBRequest.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(o,e,r),e._byobRequest=o}return e._byobRequest}function ke(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function je(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===t)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range")}r.buffer=r.buffer,Ce(e,t)}function Ae(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===t.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.bufferByteLength!==t.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(r.bytesFilled+t.byteLength>r.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");const o=t.byteLength;r.buffer=t.buffer,Ce(e,o)}function ze(e,t,r,o,n,a,i){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,fe(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,t._autoAllocateChunkSize=i,t._pendingPullIntos=new w,e._readableStreamController=t;h(d(r()),(()=>{t._started=!0,_e(t)}),(e=>{Oe(t,e)}))}function De(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function Le(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function Fe(e){return new ReadableStreamBYOBReader(e)}function Ie(e,t){e._reader._readIntoRequests.push(t)}function $e(e){return e._reader._readIntoRequests.length}function Me(e){const t=e._reader;return void 0!==t&&!!Qe(t)}Object.defineProperties(ReadableByteStreamController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableByteStreamController.prototype,t.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class ReadableStreamBYOBReader{constructor(e){if($(e,1,"ReadableStreamBYOBReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!be(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new w}get closed(){return Qe(this)?this._closedPromise:f(xe("closed"))}cancel(e){return Qe(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(xe("cancel"))}read(e){if(!Qe(this))return f(xe("read"));if(!ArrayBuffer.isView(e))return f(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return f(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return f(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return f(P("read from"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return Ye(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),o}releaseLock(){if(!Qe(this))throw xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function Qe(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof ReadableStreamBYOBReader)}function Ye(e,t,r){const o=e._ownerReadableStream;o._disturbed=!0,"errored"===o._state?r._errorSteps(o._storedError):function(e,t,r){const o=e._controlledReadableByteStream;let n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);const a=t.constructor,i=t.buffer,l={buffer:i,bufferByteLength:i.byteLength,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(l),void Ie(o,r);if("closed"!==o._state){if(e._queueTotalSize>0){if(Se(e,l)){const t=ye(l);return we(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return Oe(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(l),Ie(o,r),_e(e)}else{const e=new a(l.buffer,l.byteOffset,0);r._closeSteps(e)}}(o._readableStreamController,t,r)}function xe(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function Ne(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(ae(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function He(e){const{size:t}=e;return t||(()=>1)}function Ve(e,t){L(e,t);const r=null==e?void 0:e.highWaterMark,o=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:Q(r),size:void 0===o?void 0:Ue(o,`${t} has member 'size' that`)}}function Ue(e,t){return F(e,t),t=>Q(e(t))}function Ge(e,t,r){return F(e,r),r=>v(e,t,[r])}function Xe(e,t,r){return F(e,r),()=>v(e,t,[])}function Je(e,t,r){return F(e,r),r=>S(e,t,[r])}function Ke(e,t,r){return F(e,r),(r,o)=>v(e,t,[r,o])}function Ze(e,t){if(!ot(e))throw new TypeError(`${t} is not a WritableStream.`)}Object.defineProperties(ReadableStreamBYOBReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBReader.prototype,t.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});const et="function"==typeof AbortController;class WritableStream{constructor(e={},t={}){void 0===e?e=null:I(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){L(e,t);const r=null==e?void 0:e.abort,o=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===r?void 0:Ge(r,e,`${t} has member 'abort' that`),close:void 0===o?void 0:Xe(o,e,`${t} has member 'close' that`),start:void 0===n?void 0:Je(n,e,`${t} has member 'start' that`),write:void 0===i?void 0:Ke(i,e,`${t} has member 'write' that`),type:a}}(e,"First parameter");rt(this);if(void 0!==o.type)throw new RangeError("Invalid type is specified");const n=He(r);!function(e,t,r,o){const n=Object.create(WritableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0),s=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n));void 0!==t.write&&(i=e=>t.write(e,n));void 0!==t.close&&(l=()=>t.close());void 0!==t.abort&&(s=e=>t.abort(e));vt(e,n,a,i,l,s,r,o)}(this,o,Ne(r,1),n)}get locked(){if(!ot(this))throw Et("locked");return nt(this)}abort(e){return ot(this)?nt(this)?f(new TypeError("Cannot abort a stream that already has a writer")):at(this,e):f(Et("abort"))}close(){return ot(this)?nt(this)?f(new TypeError("Cannot close a stream that already has a writer")):ct(this)?f(new TypeError("Cannot close an already-closing stream")):it(this):f(Et("close"))}getWriter(){if(!ot(this))throw Et("getWriter");return tt(this)}}function tt(e){return new WritableStreamDefaultWriter(e)}function rt(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new w,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function ot(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof WritableStream)}function nt(e){return void 0!==e._writer}function at(e,t){var r;if("closed"===e._state||"errored"===e._state)return d(void 0);e._writableStreamController._abortReason=t,null===(r=e._writableStreamController._abortController)||void 0===r||r.abort();const o=e._state;if("closed"===o||"errored"===o)return d(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let n=!1;"erroring"===o&&(n=!0,t=void 0);const a=c(((r,o)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:o,_reason:t,_wasAlreadyErroring:n}}));return e._pendingAbortRequest._promise=a,n||st(e,t),a}function it(e){const t=e._state;if("closed"===t||"errored"===t)return f(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=c(((t,r)=>{const o={_resolve:t,_reject:r};e._closeRequest=o})),o=e._writer;var n;return void 0!==o&&e._backpressure&&"writable"===t&&$t(o),de(n=e._writableStreamController,gt,0),Tt(n),r}function lt(e,t){"writable"!==e._state?ut(e):st(e,t)}function st(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const o=e._writer;void 0!==o&&mt(o,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&&ut(e)}function ut(e){e._state="errored",e._writableStreamController[k]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new w,void 0===e._pendingAbortRequest)return void dt(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void dt(e);h(e._writableStreamController[B](r._reason),(()=>{r._resolve(),dt(e)}),(t=>{r._reject(t),dt(e)}))}function ct(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function dt(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&At(t,e._storedError)}function ft(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){Dt(e)}(r):$t(r)),e._backpressure=t}Object.defineProperties(WritableStream.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStream.prototype,t.toStringTag,{value:"WritableStream",configurable:!0});class WritableStreamDefaultWriter{constructor(e){if($(e,1,"WritableStreamDefaultWriter"),Ze(e,"First parameter"),nt(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!ct(e)&&e._backpressure?Dt(this):Ft(this),kt(this);else if("erroring"===t)Lt(this,e._storedError),kt(this);else if("closed"===t)Ft(this),kt(r=this),zt(r);else{const t=e._storedError;Lt(this,t),jt(this,t)}var r}get closed(){return bt(this)?this._closedPromise:f(Ot("closed"))}get desiredSize(){if(!bt(this))throw Ot("desiredSize");if(void 0===this._ownerWritableStream)throw Bt("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Rt(t._writableStreamController)}(this)}get ready(){return bt(this)?this._readyPromise:f(Ot("ready"))}abort(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("abort")):function(e,t){return at(e._ownerWritableStream,t)}(this,e):f(Ot("abort"))}close(){if(!bt(this))return f(Ot("close"));const e=this._ownerWritableStream;return void 0===e?f(Bt("close")):ct(e)?f(new TypeError("Cannot close an already-closing stream")):ht(this)}releaseLock(){if(!bt(this))throw Ot("releaseLock");void 0!==this._ownerWritableStream&&pt(this)}write(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("write to")):yt(this,e):f(Ot("write"))}}function bt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof WritableStreamDefaultWriter)}function ht(e){return it(e._ownerWritableStream)}function _t(e,t){"pending"===e._closedPromiseState?At(e,t):function(e,t){jt(e,t)}(e,t)}function mt(e,t){"pending"===e._readyPromiseState?It(e,t):function(e,t){Lt(e,t)}(e,t)}function pt(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");mt(e,r),_t(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function yt(e,t){const r=e._ownerWritableStream,o=r._writableStreamController,n=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Ct(e,t),1}}(o,t);if(r!==e._ownerWritableStream)return f(Bt("write to"));const a=r._state;if("errored"===a)return f(r._storedError);if(ct(r)||"closed"===a)return f(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return f(r._storedError);const i=function(e){return c(((t,r)=>{const o={_resolve:t,_reject:r};e._writeRequests.push(o)}))}(r);return function(e,t,r){try{de(e,t,r)}catch(t){return void Ct(e,t)}const o=e._controlledWritableStream;if(!ct(o)&&"writable"===o._state){ft(o,Pt(e))}Tt(e)}(o,t,n),i}Object.defineProperties(WritableStreamDefaultWriter.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultWriter.prototype,t.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const gt={};class WritableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!St(this))throw Wt("abortReason");return this._abortReason}get signal(){if(!St(this))throw Wt("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(e){if(!St(this))throw Wt("error");"writable"===this._controlledWritableStream._state&&qt(this,e)}[B](e){const t=this._abortAlgorithm(e);return wt(this),t}[k](){fe(this)}}function St(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof WritableStreamDefaultController)}function vt(e,t,r,o,n,a,i,l){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._abortReason=void 0,t._abortController=function(){if(et)return new AbortController}(),t._started=!1,t._strategySizeAlgorithm=l,t._strategyHWM=i,t._writeAlgorithm=o,t._closeAlgorithm=n,t._abortAlgorithm=a;const s=Pt(t);ft(e,s);h(d(r()),(()=>{t._started=!0,Tt(t)}),(r=>{t._started=!0,lt(e,r)}))}function wt(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Rt(e){return e._strategyHWM-e._queueTotalSize}function Tt(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void ut(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===gt?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),ce(e);const r=e._closeAlgorithm();wt(e),h(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&zt(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),lt(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);h(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(ce(e),!ct(r)&&"writable"===t){const t=Pt(e);ft(r,t)}Tt(e)}),(t=>{"writable"===r._state&&wt(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,lt(e,t)}(r,t)}))}(e,r)}function Ct(e,t){"writable"===e._controlledWritableStream._state&&qt(e,t)}function Pt(e){return Rt(e)<=0}function qt(e,t){const r=e._controlledWritableStream;wt(e),st(r,t)}function Et(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Wt(e){return new TypeError(`WritableStreamDefaultController.prototype.${e} can only be used on a WritableStreamDefaultController`)}function Ot(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function Bt(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function kt(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function jt(e,t){kt(e),At(e,t)}function At(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function zt(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Dt(e){e._readyPromise=c(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function Lt(e,t){Dt(e),It(e,t)}function Ft(e){Dt(e),$t(e)}function It(e,t){void 0!==e._readyPromise_reject&&(y(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function $t(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(WritableStreamDefaultController.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultController.prototype,t.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const Mt="undefined"!=typeof DOMException?DOMException:void 0;const Qt=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Mt)?Mt:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return e.prototype=Object.create(Error.prototype),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,configurable:!0}),e}();function Yt(e,t,o,n,a,i){const l=H(e),s=tt(t);e._disturbed=!0;let u=!1,p=d(void 0);return c(((g,S)=>{let v;if(void 0!==i){if(v=()=>{const r=new Qt("Aborted","AbortError"),o=[];n||o.push((()=>"writable"===t._state?at(t,r):d(void 0))),a||o.push((()=>"readable"===e._state?br(e,r):d(void 0))),E((()=>Promise.all(o.map((e=>e())))),!0,r)},i.aborted)return void v();i.addEventListener("abort",v)}var w,R,T;if(q(e,l._closedPromise,(e=>{n?W(!0,e):E((()=>at(t,e)),!0,e)})),q(t,s._closedPromise,(t=>{a?W(!0,t):E((()=>br(e,t)),!0,t)})),w=e,R=l._closedPromise,T=()=>{o?W():E((()=>function(e){const t=e._ownerWritableStream,r=t._state;return ct(t)||"closed"===r?d(void 0):"errored"===r?f(t._storedError):ht(e)}(s)))},"closed"===w._state?T():_(R,T),ct(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");a?W(!0,t):E((()=>br(e,t)),!0,t)}function P(){const e=p;return b(p,(()=>e!==p?P():void 0))}function q(e,t,r){"errored"===e._state?r(e._storedError):m(t,r)}function E(e,r,o){function n(){h(e(),(()=>O(r,o)),(e=>O(!0,e)))}u||(u=!0,"writable"!==t._state||ct(t)?n():_(P(),n))}function W(e,r){u||(u=!0,"writable"!==t._state||ct(t)?O(e,r):_(P(),(()=>O(e,r))))}function O(e,t){pt(s),C(l),void 0!==i&&i.removeEventListener("abort",v),e?S(t):g(void 0)}y(c(((e,t)=>{!function o(n){n?e():b(u?d(!0):b(s._readyPromise,(()=>c(((e,t)=>{K(l,{_chunkSteps:t=>{p=b(yt(s,t),void 0,r),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),o,t)}(!1)})))}))}class ReadableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!xt(this))throw er("desiredSize");return Jt(this)}close(){if(!xt(this))throw er("close");if(!Kt(this))throw new TypeError("The stream is not in a state that permits close");Ut(this)}enqueue(e){if(!xt(this))throw er("enqueue");if(!Kt(this))throw new TypeError("The stream is not in a state that permits enqueue");return Gt(this,e)}error(e){if(!xt(this))throw er("error");Xt(this,e)}[j](e){fe(this);const t=this._cancelAlgorithm(e);return Vt(this),t}[A](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=ce(this);this._closeRequested&&0===this._queue.length?(Vt(this),hr(t)):Nt(this),e._chunkSteps(r)}else V(t,e),Nt(this)}}function xt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof ReadableStreamDefaultController)}function Nt(e){if(!Ht(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;h(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,Nt(e))}),(t=>{Xt(e,t)}))}function Ht(e){const t=e._controlledReadableStream;if(!Kt(e))return!1;if(!e._started)return!1;if(fr(t)&&G(t)>0)return!0;return Jt(e)>0}function Vt(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Ut(e){if(!Kt(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(Vt(e),hr(t))}function Gt(e,t){if(!Kt(e))return;const r=e._controlledReadableStream;if(fr(r)&&G(r)>0)U(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw Xt(e,t),t}try{de(e,t,r)}catch(t){throw Xt(e,t),t}}Nt(e)}function Xt(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(fe(e),Vt(e),_r(r,t))}function Jt(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Kt(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function Zt(e,t,r,o,n,a,i){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=i,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,e._readableStreamController=t;h(d(r()),(()=>{t._started=!0,Nt(t)}),(e=>{Xt(t,e)}))}function er(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function tr(e,t){return be(e._readableStreamController)?function(e){let t,r,o,n,a,i=H(e),l=!1,s=!1,u=!1,f=!1,b=!1;const h=c((e=>{a=e}));function _(e){m(e._closedPromise,(t=>{e===i&&(Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),f&&b||a(void 0))}))}function p(){Qe(i)&&(C(i),i=H(e),_(i));K(i,{_chunkSteps:t=>{g((()=>{s=!1,u=!1;const r=t;let i=t;if(!f&&!b)try{i=ue(t)}catch(t){return Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),void a(br(e,t))}f||We(o._readableStreamController,r),b||We(n._readableStreamController,i),l=!1,s?S():u&&v()}))},_closeSteps:()=>{l=!1,f||Ee(o._readableStreamController),b||Ee(n._readableStreamController),o._readableStreamController._pendingPullIntos.length>0&&je(o._readableStreamController,0),n._readableStreamController._pendingPullIntos.length>0&&je(n._readableStreamController,0),f&&b||a(void 0)},_errorSteps:()=>{l=!1}})}function y(t,r){J(i)&&(C(i),i=Fe(e),_(i));const c=r?n:o,d=r?o:n;Ye(i,t,{_chunkSteps:t=>{g((()=>{s=!1,u=!1;const o=r?b:f;if(r?f:b)o||Ae(c._readableStreamController,t);else{let r;try{r=ue(t)}catch(t){return Oe(c._readableStreamController,t),Oe(d._readableStreamController,t),void a(br(e,t))}o||Ae(c._readableStreamController,t),We(d._readableStreamController,r)}l=!1,s?S():u&&v()}))},_closeSteps:e=>{l=!1;const t=r?b:f,o=r?f:b;t||Ee(c._readableStreamController),o||Ee(d._readableStreamController),void 0!==e&&(t||Ae(c._readableStreamController,e),!o&&d._readableStreamController._pendingPullIntos.length>0&&je(d._readableStreamController,0)),t&&o||a(void 0)},_errorSteps:()=>{l=!1}})}function S(){if(l)return s=!0,d(void 0);l=!0;const e=Be(o._readableStreamController);return null===e?p():y(e._view,!1),d(void 0)}function v(){if(l)return u=!0,d(void 0);l=!0;const e=Be(n._readableStreamController);return null===e?p():y(e._view,!0),d(void 0)}function w(o){if(f=!0,t=o,b){const o=ie([t,r]),n=br(e,o);a(n)}return h}function R(o){if(b=!0,r=o,f){const o=ie([t,r]),n=br(e,o);a(n)}return h}function T(){}return o=ur(T,S,w),n=ur(T,v,R),_(i),[o,n]}(e):function(e,t){const r=H(e);let o,n,a,i,l,s=!1,u=!1,f=!1,b=!1;const h=c((e=>{l=e}));function _(){if(s)return u=!0,d(void 0);s=!0;return K(r,{_chunkSteps:e=>{g((()=>{u=!1;const t=e,r=e;f||Gt(a._readableStreamController,t),b||Gt(i._readableStreamController,r),s=!1,u&&_()}))},_closeSteps:()=>{s=!1,f||Ut(a._readableStreamController),b||Ut(i._readableStreamController),f&&b||l(void 0)},_errorSteps:()=>{s=!1}}),d(void 0)}function p(t){if(f=!0,o=t,b){const t=ie([o,n]),r=br(e,t);l(r)}return h}function y(t){if(b=!0,n=t,f){const t=ie([o,n]),r=br(e,t);l(r)}return h}function S(){}return a=sr(S,_,p),i=sr(S,_,y),m(r._closedPromise,(e=>{Xt(a._readableStreamController,e),Xt(i._readableStreamController,e),f&&b||l(void 0)})),[a,i]}(e)}function rr(e,t,r){return F(e,r),r=>v(e,t,[r])}function or(e,t,r){return F(e,r),r=>v(e,t,[r])}function nr(e,t,r){return F(e,r),r=>S(e,t,[r])}function ar(e,t){if("bytes"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function ir(e,t){if("byob"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function lr(e,t){L(e,t);const r=null==e?void 0:e.preventAbort,o=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(`${t} is not an AbortSignal.`)}(a,`${t} has member 'signal' that`),{preventAbort:Boolean(r),preventCancel:Boolean(o),preventClose:Boolean(n),signal:a}}Object.defineProperties(ReadableStreamDefaultController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultController.prototype,t.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class ReadableStream{constructor(e={},t={}){void 0===e?e=null:I(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){L(e,t);const r=e,o=null==r?void 0:r.autoAllocateChunkSize,n=null==r?void 0:r.cancel,a=null==r?void 0:r.pull,i=null==r?void 0:r.start,l=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===o?void 0:x(o,`${t} has member 'autoAllocateChunkSize' that`),cancel:void 0===n?void 0:rr(n,r,`${t} has member 'cancel' that`),pull:void 0===a?void 0:or(a,r,`${t} has member 'pull' that`),start:void 0===i?void 0:nr(i,r,`${t} has member 'start' that`),type:void 0===l?void 0:ar(l,`${t} has member 'type' that`)}}(e,"First parameter");if(cr(this),"bytes"===o.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,t,r){const o=Object.create(ReadableByteStreamController.prototype);let n=()=>{},a=()=>d(void 0),i=()=>d(void 0);void 0!==t.start&&(n=()=>t.start(o)),void 0!==t.pull&&(a=()=>t.pull(o)),void 0!==t.cancel&&(i=e=>t.cancel(e));const l=t.autoAllocateChunkSize;if(0===l)throw new TypeError("autoAllocateChunkSize must be greater than 0");ze(e,o,n,a,i,r,l)}(this,o,Ne(r,0))}else{const e=He(r);!function(e,t,r,o){const n=Object.create(ReadableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n)),void 0!==t.pull&&(i=()=>t.pull(n)),void 0!==t.cancel&&(l=e=>t.cancel(e)),Zt(e,n,a,i,l,r,o)}(this,o,Ne(r,1),e)}}get locked(){if(!dr(this))throw mr("locked");return fr(this)}cancel(e){return dr(this)?fr(this)?f(new TypeError("Cannot cancel a stream that already has a reader")):br(this,e):f(mr("cancel"))}getReader(e){if(!dr(this))throw mr("getReader");return void 0===function(e,t){L(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:ir(r,`${t} has member 'mode' that`)}}(e,"First parameter").mode?H(this):Fe(this)}pipeThrough(e,t={}){if(!dr(this))throw mr("pipeThrough");$(e,1,"pipeThrough");const r=function(e,t){L(e,t);const r=null==e?void 0:e.readable;M(r,"readable","ReadableWritablePair"),N(r,`${t} has member 'readable' that`);const o=null==e?void 0:e.writable;return M(o,"writable","ReadableWritablePair"),Ze(o,`${t} has member 'writable' that`),{readable:r,writable:o}}(e,"First parameter"),o=lr(t,"Second parameter");if(fr(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(nt(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return y(Yt(this,r.writable,o.preventClose,o.preventAbort,o.preventCancel,o.signal)),r.readable}pipeTo(e,t={}){if(!dr(this))return f(mr("pipeTo"));if(void 0===e)return f("Parameter 1 is required in 'pipeTo'.");if(!ot(e))return f(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=lr(t,"Second parameter")}catch(e){return f(e)}return fr(this)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):nt(e)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Yt(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!dr(this))throw mr("tee");return ie(tr(this))}values(e){if(!dr(this))throw mr("values");return function(e,t){const r=H(e),o=new te(r,t),n=Object.create(re);return n._asyncIteratorImpl=o,n}(this,function(e,t){L(e,t);const r=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(r)}}(e,"First parameter").preventCancel)}}function sr(e,t,r,o=1,n=(()=>1)){const a=Object.create(ReadableStream.prototype);cr(a);return Zt(a,Object.create(ReadableStreamDefaultController.prototype),e,t,r,o,n),a}function ur(e,t,r){const o=Object.create(ReadableStream.prototype);cr(o);return ze(o,Object.create(ReadableByteStreamController.prototype),e,t,r,0,void 0),o}function cr(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function dr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof ReadableStream)}function fr(e){return void 0!==e._reader}function br(e,t){if(e._disturbed=!0,"closed"===e._state)return d(void 0);if("errored"===e._state)return f(e._storedError);hr(e);const o=e._reader;void 0!==o&&Qe(o)&&(o._readIntoRequests.forEach((e=>{e._closeSteps(void 0)})),o._readIntoRequests=new w);return p(e._readableStreamController[j](t),r)}function hr(e){e._state="closed";const t=e._reader;void 0!==t&&(O(t),J(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new w))}function _r(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(W(r,t),J(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new w):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new w))}function mr(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function pr(e,t){L(e,t);const r=null==e?void 0:e.highWaterMark;return M(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Q(r)}}Object.defineProperties(ReadableStream.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStream.prototype,t.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof t.asyncIterator&&Object.defineProperty(ReadableStream.prototype,t.asyncIterator,{value:ReadableStream.prototype.values,writable:!0,configurable:!0});const yr=e=>e.byteLength;try{Object.defineProperty(yr,"name",{value:"size",configurable:!0})}catch(e){}class ByteLengthQueuingStrategy{constructor(e){$(e,1,"ByteLengthQueuingStrategy"),e=pr(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Sr(this))throw gr("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!Sr(this))throw gr("size");return yr}}function gr(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function Sr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof ByteLengthQueuingStrategy)}Object.defineProperties(ByteLengthQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ByteLengthQueuingStrategy.prototype,t.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const vr=()=>1;try{Object.defineProperty(vr,"name",{value:"size",configurable:!0})}catch(e){}class CountQueuingStrategy{constructor(e){$(e,1,"CountQueuingStrategy"),e=pr(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Rr(this))throw wr("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Rr(this))throw wr("size");return vr}}function wr(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Rr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof CountQueuingStrategy)}function Tr(e,t,r){return F(e,r),r=>v(e,t,[r])}function Cr(e,t,r){return F(e,r),r=>S(e,t,[r])}function Pr(e,t,r){return F(e,r),(r,o)=>v(e,t,[r,o])}Object.defineProperties(CountQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(CountQueuingStrategy.prototype,t.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class TransformStream{constructor(e={},t={},r={}){void 0===e&&(e=null);const o=Ve(t,"Second parameter"),n=Ve(r,"Third parameter"),a=function(e,t){L(e,t);const r=null==e?void 0:e.flush,o=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Tr(r,e,`${t} has member 'flush' that`),readableType:o,start:void 0===n?void 0:Cr(n,e,`${t} has member 'start' that`),transform:void 0===a?void 0:Pr(a,e,`${t} has member 'transform' that`),writableType:i}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");const i=Ne(n,0),l=He(n),s=Ne(o,1),u=He(o);let b;!function(e,t,r,o,n,a){function i(){return t}function l(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return p(e._backpressureChangePromise,(()=>{const o=e._writable;if("erroring"===o._state)throw o._storedError;return Ar(r,t)}))}return Ar(r,t)}(e,t)}function s(t){return function(e,t){return Er(e,t),d(void 0)}(e,t)}function u(){return function(e){const t=e._readable,r=e._transformStreamController,o=r._flushAlgorithm();return kr(r),p(o,(()=>{if("errored"===t._state)throw t._storedError;Ut(t._readableStreamController)}),(r=>{throw Er(e,r),t._storedError}))}(e)}function c(){return function(e){return Or(e,!1),e._backpressureChangePromise}(e)}function f(t){return Wr(e,t),d(void 0)}e._writable=function(e,t,r,o,n=1,a=(()=>1)){const i=Object.create(WritableStream.prototype);return rt(i),vt(i,Object.create(WritableStreamDefaultController.prototype),e,t,r,o,n,a),i}(i,l,u,s,r,o),e._readable=sr(i,c,f,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Or(e,!0),e._transformStreamController=void 0}(this,c((e=>{b=e})),s,u,i,l),function(e,t){const r=Object.create(TransformStreamDefaultController.prototype);let o=e=>{try{return jr(r,e),d(void 0)}catch(e){return f(e)}},n=()=>d(void 0);void 0!==t.transform&&(o=e=>t.transform(e,r));void 0!==t.flush&&(n=()=>t.flush(r));!function(e,t,r,o){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=o}(e,r,o,n)}(this,a),void 0!==a.start?b(a.start(this._transformStreamController)):b(void 0)}get readable(){if(!qr(this))throw Dr("readable");return this._readable}get writable(){if(!qr(this))throw Dr("writable");return this._writable}}function qr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof TransformStream)}function Er(e,t){Xt(e._readable._readableStreamController,t),Wr(e,t)}function Wr(e,t){kr(e._transformStreamController),Ct(e._writable._writableStreamController,t),e._backpressure&&Or(e,!1)}function Or(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=c((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(TransformStream.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStream.prototype,t.toStringTag,{value:"TransformStream",configurable:!0});class TransformStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Br(this))throw zr("desiredSize");return Jt(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!Br(this))throw zr("enqueue");jr(this,e)}error(e){if(!Br(this))throw zr("error");var t;t=e,Er(this._controlledTransformStream,t)}terminate(){if(!Br(this))throw zr("terminate");!function(e){const t=e._controlledTransformStream;Ut(t._readable._readableStreamController);const r=new TypeError("TransformStream terminated");Wr(t,r)}(this)}}function Br(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof TransformStreamDefaultController)}function kr(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function jr(e,t){const r=e._controlledTransformStream,o=r._readable._readableStreamController;if(!Kt(o))throw new TypeError("Readable side is not in a state that permits enqueue");try{Gt(o,t)}catch(e){throw Wr(r,e),r._readable._storedError}(function(e){return!Ht(e)})(o)!==r._backpressure&&Or(r,!0)}function Ar(e,t){return p(e._transformAlgorithm(t),void 0,(t=>{throw Er(e._controlledTransformStream,t),t}))}function zr(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function Dr(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(TransformStreamDefaultController.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStreamDefaultController.prototype,t.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});const Lr={ReadableStream:ReadableStream,ReadableStreamDefaultController:ReadableStreamDefaultController,ReadableByteStreamController:ReadableByteStreamController,ReadableStreamBYOBRequest:ReadableStreamBYOBRequest,ReadableStreamDefaultReader:ReadableStreamDefaultReader,ReadableStreamBYOBReader:ReadableStreamBYOBReader,WritableStream:WritableStream,WritableStreamDefaultController:WritableStreamDefaultController,WritableStreamDefaultWriter:WritableStreamDefaultWriter,ByteLengthQueuingStrategy:ByteLengthQueuingStrategy,CountQueuingStrategy:CountQueuingStrategy,TransformStream:TransformStream,TransformStreamDefaultController:TransformStreamDefaultController};if(void 0!==o)for(const e in Lr)Object.prototype.hasOwnProperty.call(Lr,e)&&Object.defineProperty(o,e,{value:Lr[e],writable:!0,configurable:!0});e.ByteLengthQueuingStrategy=ByteLengthQueuingStrategy,e.CountQueuingStrategy=CountQueuingStrategy,e.ReadableByteStreamController=ReadableByteStreamController,e.ReadableStream=ReadableStream,e.ReadableStreamBYOBReader=ReadableStreamBYOBReader,e.ReadableStreamBYOBRequest=ReadableStreamBYOBRequest,e.ReadableStreamDefaultController=ReadableStreamDefaultController,e.ReadableStreamDefaultReader=ReadableStreamDefaultReader,e.TransformStream=TransformStream,e.TransformStreamDefaultController=TransformStreamDefaultController,e.WritableStream=WritableStream,e.WritableStreamDefaultController=WritableStreamDefaultController,e.WritableStreamDefaultWriter=WritableStreamDefaultWriter,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=polyfill.es2018.min.js.map diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map b/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map index df0d0c4..b27333d 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.es2018.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","noop","globals","self","window","global","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","SimpleQueue","[object Object]","this","_front","_elements","_next","_back","_cursor","_size","length","element","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","push","oldFront","newFront","oldCursor","newCursor","elements","callback","i","node","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","shift","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","IsReadableStreamLocked","closed","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","Object","hasOwnProperty","_disturbed","_readableStreamController","defineProperties","cancel","enumerable","read","releaseLock","toStringTag","defineProperty","configurable","AsyncIteratorPrototype","getPrototypeOf","async","ReadableStreamAsyncIteratorImpl","preventCancel","_preventCancel","nextSteps","_nextSteps","_ongoingPromise","returnSteps","_returnSteps","_isFinished","result","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","next","streamAsyncIteratorBrandCheckException","return","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","pair","_queue","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","view","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","isView","ReadableByteStreamControllerRespondWithNewView","respond","respondWithNewView","ReadableByteStreamController","byobRequest","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","desiredSize","ReadableByteStreamControllerGetDesiredSize","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","peek","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","close","enqueue","error","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","AbortController","WritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","locked","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","forEach","writeRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","abortRequest","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","getWriter","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","abortReason","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","createDOMExceptionPolyfill","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","actions","shutdownWithAction","all","map","action","aborted","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","isAbortSignal","assertAbortSignal","Boolean","ReadableStream","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","rawOptions","convertReaderOptions","rawTransform","transform","readable","convertReadableWritablePair","destination","impl","AcquireReadableStreamAsyncIterator","convertIteratorOptions","convertQueuingStrategyInit","getReader","pipeThrough","pipeTo","tee","values","asyncIterator","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","TransformStream","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise_resolve","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStream","IsTransformStreamDefaultController","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","terminate","exports","prop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.es2018.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","noop","globals","self","window","global","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","SimpleQueue","[object Object]","this","_front","_elements","_next","_back","_cursor","_size","length","element","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","push","oldFront","newFront","oldCursor","newCursor","elements","callback","i","node","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","shift","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","IsReadableStreamLocked","closed","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","Object","hasOwnProperty","_disturbed","_readableStreamController","defineProperties","cancel","enumerable","read","releaseLock","toStringTag","defineProperty","configurable","AsyncIteratorPrototype","getPrototypeOf","async","ReadableStreamAsyncIteratorImpl","preventCancel","_preventCancel","nextSteps","_nextSteps","_ongoingPromise","returnSteps","_returnSteps","_isFinished","result","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","next","streamAsyncIteratorBrandCheckException","return","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","pair","_queue","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","view","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","isView","ReadableByteStreamControllerRespondWithNewView","respond","respondWithNewView","ReadableByteStreamController","byobRequest","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","desiredSize","ReadableByteStreamControllerGetDesiredSize","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","peek","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","close","enqueue","error","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","AbortController","WritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","locked","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","forEach","writeRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","abortRequest","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","getWriter","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","abortReason","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","createDOMExceptionPolyfill","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","actions","shutdownWithAction","all","map","action","aborted","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","isAbortSignal","assertAbortSignal","Boolean","ReadableStream","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","rawOptions","convertReaderOptions","rawTransform","transform","readable","convertReadableWritablePair","destination","impl","AcquireReadableStreamAsyncIterator","convertIteratorOptions","convertQueuingStrategyInit","getReader","pipeThrough","pipeTo","tee","values","asyncIterator","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","TransformStream","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise_resolve","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStream","IsTransformStreamDefaultController","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","terminate","exports","prop"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs b/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs index 7266a22..b764c06 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs +++ b/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ /// const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? @@ -3696,10 +3696,16 @@ function convertQueuingStrategyInit(init, context) { const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; -Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3758,10 +3764,16 @@ function IsByteLengthQueuingStrategy(x) { const countSizeFunction = () => { return 1; }; -Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map b/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map index 6b01cdb..c6449f6 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.es2018.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.es2018.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es6.js b/node_modules/web-streams-polyfill/dist/polyfill.es6.js index 68a3c03..18a4721 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es6.js +++ b/node_modules/web-streams-polyfill/dist/polyfill.es6.js @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -3713,10 +3713,16 @@ const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; - Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3775,10 +3781,16 @@ const countSizeFunction = () => { return 1; }; - Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map b/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map index 8765548..ac2d583 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.es6.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","exports"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.es6.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","exports"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js b/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js index 1cf50a5..c711d89 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js +++ b/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WebStreamsPolyfill={})}(this,(function(e){"use strict";const t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function r(){}const o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function n(e){return"object"==typeof e&&null!==e||"function"==typeof e}const a=r,i=Promise,l=Promise.prototype.then,s=Promise.resolve.bind(i),u=Promise.reject.bind(i);function c(e){return new i(e)}function d(e){return s(e)}function f(e){return u(e)}function b(e,t,r){return l.call(e,t,r)}function h(e,t,r){b(b(e,t,r),void 0,a)}function _(e,t){h(e,t)}function m(e,t){h(e,void 0,t)}function p(e,t,r){return b(e,t,r)}function y(e){b(e,void 0,a)}const S=(()=>{const e=o&&o.queueMicrotask;if("function"==typeof e)return e;const t=d(void 0);return e=>b(t,e)})();function g(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function v(e,t,r){try{return d(g(e,t,r))}catch(e){return f(e)}}class w{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let o=r+1;const n=e._elements,a=n[r];return 16384===o&&(t=e._next,o=0),--this._size,this._cursor=o,e!==t&&(this._front=t),n[r]=void 0,a}forEach(e){let t=this._cursor,r=this._front,o=r._elements;for(;!(t===o.length&&void 0===r._next||t===o.length&&(r=r._next,o=r._elements,t=0,0===o.length));)e(o[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function R(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?q(e):"closed"===t._state?function(e){q(e),O(e)}(e):E(e,t._storedError)}function T(e,t){return br(e._ownerReadableStream,t)}function C(e){"readable"===e._ownerReadableStream._state?W(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){E(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function P(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function q(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function E(e,t){q(e),W(e,t)}function W(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function O(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const B=t("[[AbortSteps]]"),k=t("[[ErrorSteps]]"),j=t("[[CancelSteps]]"),A=t("[[PullSteps]]"),z=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},D=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function I(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(`${t} is not an object.`);var r}function L(e,t){if("function"!=typeof e)throw new TypeError(`${t} is not a function.`)}function F(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(`${t} is not an object.`)}function $(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function M(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function Q(e){return Number(e)}function Y(e){return 0===e?0:e}function x(e,t){const r=Number.MAX_SAFE_INTEGER;let o=Number(e);if(o=Y(o),!z(o))throw new TypeError(`${t} is not a finite number`);if(o=function(e){return Y(D(e))}(o),o<0||o>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return z(o)&&0!==o?o:0}function N(e,t){if(!dr(e))throw new TypeError(`${t} is not a ReadableStream.`)}function H(e){return new ReadableStreamDefaultReader(e)}function V(e,t){e._reader._readRequests.push(t)}function U(e,t,r){const o=e._reader._readRequests.shift();r?o._closeSteps():o._chunkSteps(t)}function G(e){return e._reader._readRequests.length}function X(e){const t=e._reader;return void 0!==t&&!!J(t)}class ReadableStreamDefaultReader{constructor(e){if($(e,1,"ReadableStreamDefaultReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new w}get closed(){return J(this)?this._closedPromise:f(Z("closed"))}cancel(e){return J(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(Z("cancel"))}read(){if(!J(this))return f(Z("read"));if(void 0===this._ownerReadableStream)return f(P("read from"));let e,t;const r=c(((r,o)=>{e=r,t=o}));return K(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!J(this))throw Z("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function J(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof ReadableStreamDefaultReader)}function K(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[A](t)}function Z(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}let ee;Object.defineProperties(ReadableStreamDefaultReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultReader.prototype,t.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0}),"symbol"==typeof t.asyncIterator&&(ee={[t.asyncIterator](){return this}},Object.defineProperty(ee,t.asyncIterator,{enumerable:!1}));class te{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?p(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?p(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return f(P("iterate"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return K(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,S((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),r(t)}}),o}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return f(P("finish iterating"));if(!this._preventCancel){const r=T(t,e);return C(t),p(r,(()=>({value:e,done:!0})))}return C(t),d({value:e,done:!0})}}const re={next(){return oe(this)?this._asyncIteratorImpl.next():f(ne("next"))},return(e){return oe(this)?this._asyncIteratorImpl.return(e):f(ne("return"))}};function oe(e){if(!n(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof te}catch(e){return!1}}function ne(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==ee&&Object.setPrototypeOf(re,ee);const ae=Number.isNaN||function(e){return e!=e};function ie(e){return e.slice()}function le(e,t,r,o,n){new Uint8Array(e).set(new Uint8Array(r,o,n),t)}function se(e,t,r){if(e.slice)return e.slice(t,r);const o=r-t,n=new ArrayBuffer(o);return le(n,0,e,t,o),n}function ue(e){const t=se(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(t)}function ce(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function de(e,t,r){if("number"!=typeof(o=r)||ae(o)||o<0||r===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var o;e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function fe(e){e._queue=new w,e._queueTotalSize=0}class ReadableStreamBYOBRequest{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!he(this))throw De("view");return this._view}respond(e){if(!he(this))throw De("respond");if($(e,1,"respond"),e=x(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,je(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!he(this))throw De("respondWithNewView");if($(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Ae(this._associatedReadableByteStreamController,e)}}Object.defineProperties(ReadableStreamBYOBRequest.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBRequest.prototype,t.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class ReadableByteStreamController{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!be(this))throw Ie("byobRequest");return Be(this)}get desiredSize(){if(!be(this))throw Ie("desiredSize");return ke(this)}close(){if(!be(this))throw Ie("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);Ee(this)}enqueue(e){if(!be(this))throw Ie("enqueue");if($(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);We(this,e)}error(e){if(!be(this))throw Ie("error");Oe(this,e)}[j](e){me(this),fe(this);const t=this._cancelAlgorithm(e);return qe(this),t}[A](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,we(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const o={buffer:t,bufferByteLength:r,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(o)}V(t,e),_e(this)}}function be(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof ReadableByteStreamController)}function he(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof ReadableStreamBYOBRequest)}function _e(e){if(!function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(X(t)&&G(t)>0)return!0;if(Me(t)&&$e(t)>0)return!0;if(ke(e)>0)return!0;return!1}(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;h(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,_e(e))}),(t=>{Oe(e,t)}))}function me(e){Re(e),e._pendingPullIntos=new w}function pe(e,t){let r=!1;"closed"===e._state&&(r=!0);const o=ye(t);"default"===t.readerType?U(e,o,r):function(e,t,r){const o=e._reader._readIntoRequests.shift();r?o._closeSteps(t):o._chunkSteps(t)}(e,o,r)}function ye(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function Se(e,t,r,o){e._queue.push({buffer:t,byteOffset:r,byteLength:o}),e._queueTotalSize+=o}function ge(e,t){const r=t.elementSize,o=t.bytesFilled-t.bytesFilled%r,n=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),a=t.bytesFilled+n,i=a-a%r;let l=n,s=!1;i>o&&(l=i-t.bytesFilled,s=!0);const u=e._queue;for(;l>0;){const r=u.peek(),o=Math.min(l,r.byteLength),n=t.byteOffset+t.bytesFilled;le(t.buffer,n,r.buffer,r.byteOffset,o),r.byteLength===o?u.shift():(r.byteOffset+=o,r.byteLength-=o),e._queueTotalSize-=o,ve(e,o,t),l-=o}return s}function ve(e,t,r){r.bytesFilled+=t}function we(e){0===e._queueTotalSize&&e._closeRequested?(qe(e),hr(e._controlledReadableByteStream)):_e(e)}function Re(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Te(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();ge(e,t)&&(Pe(e),pe(e._controlledReadableByteStream,t))}}function Ce(e,t){const r=e._pendingPullIntos.peek();Re(e);"closed"===e._controlledReadableByteStream._state?function(e,t){const r=e._controlledReadableByteStream;if(Me(r))for(;$e(r)>0;)pe(r,Pe(e))}(e):function(e,t,r){if(ve(0,t,r),r.bytesFilled0){const t=r.byteOffset+r.bytesFilled,n=se(r.buffer,t-o,t);Se(e,n,0,n.byteLength)}r.bytesFilled-=o,pe(e._controlledReadableByteStream,r),Te(e)}(e,t,r),_e(e)}function Pe(e){return e._pendingPullIntos.shift()}function qe(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Ee(e){const t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Oe(e,t),t}}qe(e),hr(t)}}function We(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const o=t.buffer,n=t.byteOffset,a=t.byteLength,i=o;if(e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek();t.buffer,0,t.buffer=t.buffer}if(Re(e),X(r))if(0===G(r))Se(e,i,n,a);else{e._pendingPullIntos.length>0&&Pe(e);U(r,new Uint8Array(i,n,a),!1)}else Me(r)?(Se(e,i,n,a),Te(e)):Se(e,i,n,a);_e(e)}function Oe(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(me(e),fe(e),qe(e),_r(r,t))}function Be(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek(),r=new Uint8Array(t.buffer,t.byteOffset+t.bytesFilled,t.byteLength-t.bytesFilled),o=Object.create(ReadableStreamBYOBRequest.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(o,e,r),e._byobRequest=o}return e._byobRequest}function ke(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function je(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===t)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range")}r.buffer=r.buffer,Ce(e,t)}function Ae(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===t.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.bufferByteLength!==t.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(r.bytesFilled+t.byteLength>r.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");const o=t.byteLength;r.buffer=t.buffer,Ce(e,o)}function ze(e,t,r,o,n,a,i){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,fe(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,t._autoAllocateChunkSize=i,t._pendingPullIntos=new w,e._readableStreamController=t;h(d(r()),(()=>{t._started=!0,_e(t)}),(e=>{Oe(t,e)}))}function De(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function Ie(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function Le(e){return new ReadableStreamBYOBReader(e)}function Fe(e,t){e._reader._readIntoRequests.push(t)}function $e(e){return e._reader._readIntoRequests.length}function Me(e){const t=e._reader;return void 0!==t&&!!Qe(t)}Object.defineProperties(ReadableByteStreamController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableByteStreamController.prototype,t.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class ReadableStreamBYOBReader{constructor(e){if($(e,1,"ReadableStreamBYOBReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!be(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new w}get closed(){return Qe(this)?this._closedPromise:f(xe("closed"))}cancel(e){return Qe(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(xe("cancel"))}read(e){if(!Qe(this))return f(xe("read"));if(!ArrayBuffer.isView(e))return f(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return f(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return f(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return f(P("read from"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return Ye(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),o}releaseLock(){if(!Qe(this))throw xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function Qe(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof ReadableStreamBYOBReader)}function Ye(e,t,r){const o=e._ownerReadableStream;o._disturbed=!0,"errored"===o._state?r._errorSteps(o._storedError):function(e,t,r){const o=e._controlledReadableByteStream;let n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);const a=t.constructor,i=t.buffer,l={buffer:i,bufferByteLength:i.byteLength,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(l),void Fe(o,r);if("closed"!==o._state){if(e._queueTotalSize>0){if(ge(e,l)){const t=ye(l);return we(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return Oe(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(l),Fe(o,r),_e(e)}else{const e=new a(l.buffer,l.byteOffset,0);r._closeSteps(e)}}(o._readableStreamController,t,r)}function xe(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function Ne(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(ae(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function He(e){const{size:t}=e;return t||(()=>1)}function Ve(e,t){I(e,t);const r=null==e?void 0:e.highWaterMark,o=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:Q(r),size:void 0===o?void 0:Ue(o,`${t} has member 'size' that`)}}function Ue(e,t){return L(e,t),t=>Q(e(t))}function Ge(e,t,r){return L(e,r),r=>v(e,t,[r])}function Xe(e,t,r){return L(e,r),()=>v(e,t,[])}function Je(e,t,r){return L(e,r),r=>g(e,t,[r])}function Ke(e,t,r){return L(e,r),(r,o)=>v(e,t,[r,o])}function Ze(e,t){if(!ot(e))throw new TypeError(`${t} is not a WritableStream.`)}Object.defineProperties(ReadableStreamBYOBReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBReader.prototype,t.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});const et="function"==typeof AbortController;class WritableStream{constructor(e={},t={}){void 0===e?e=null:F(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){I(e,t);const r=null==e?void 0:e.abort,o=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===r?void 0:Ge(r,e,`${t} has member 'abort' that`),close:void 0===o?void 0:Xe(o,e,`${t} has member 'close' that`),start:void 0===n?void 0:Je(n,e,`${t} has member 'start' that`),write:void 0===i?void 0:Ke(i,e,`${t} has member 'write' that`),type:a}}(e,"First parameter");rt(this);if(void 0!==o.type)throw new RangeError("Invalid type is specified");const n=He(r);!function(e,t,r,o){const n=Object.create(WritableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0),s=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n));void 0!==t.write&&(i=e=>t.write(e,n));void 0!==t.close&&(l=()=>t.close());void 0!==t.abort&&(s=e=>t.abort(e));vt(e,n,a,i,l,s,r,o)}(this,o,Ne(r,1),n)}get locked(){if(!ot(this))throw Et("locked");return nt(this)}abort(e){return ot(this)?nt(this)?f(new TypeError("Cannot abort a stream that already has a writer")):at(this,e):f(Et("abort"))}close(){return ot(this)?nt(this)?f(new TypeError("Cannot close a stream that already has a writer")):ct(this)?f(new TypeError("Cannot close an already-closing stream")):it(this):f(Et("close"))}getWriter(){if(!ot(this))throw Et("getWriter");return tt(this)}}function tt(e){return new WritableStreamDefaultWriter(e)}function rt(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new w,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function ot(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof WritableStream)}function nt(e){return void 0!==e._writer}function at(e,t){var r;if("closed"===e._state||"errored"===e._state)return d(void 0);e._writableStreamController._abortReason=t,null===(r=e._writableStreamController._abortController)||void 0===r||r.abort();const o=e._state;if("closed"===o||"errored"===o)return d(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let n=!1;"erroring"===o&&(n=!0,t=void 0);const a=c(((r,o)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:o,_reason:t,_wasAlreadyErroring:n}}));return e._pendingAbortRequest._promise=a,n||st(e,t),a}function it(e){const t=e._state;if("closed"===t||"errored"===t)return f(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=c(((t,r)=>{const o={_resolve:t,_reject:r};e._closeRequest=o})),o=e._writer;var n;return void 0!==o&&e._backpressure&&"writable"===t&&$t(o),de(n=e._writableStreamController,St,0),Tt(n),r}function lt(e,t){"writable"!==e._state?ut(e):st(e,t)}function st(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const o=e._writer;void 0!==o&&mt(o,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&&ut(e)}function ut(e){e._state="errored",e._writableStreamController[k]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new w,void 0===e._pendingAbortRequest)return void dt(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void dt(e);h(e._writableStreamController[B](r._reason),(()=>{r._resolve(),dt(e)}),(t=>{r._reject(t),dt(e)}))}function ct(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function dt(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&At(t,e._storedError)}function ft(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){Dt(e)}(r):$t(r)),e._backpressure=t}Object.defineProperties(WritableStream.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStream.prototype,t.toStringTag,{value:"WritableStream",configurable:!0});class WritableStreamDefaultWriter{constructor(e){if($(e,1,"WritableStreamDefaultWriter"),Ze(e,"First parameter"),nt(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!ct(e)&&e._backpressure?Dt(this):Lt(this),kt(this);else if("erroring"===t)It(this,e._storedError),kt(this);else if("closed"===t)Lt(this),kt(r=this),zt(r);else{const t=e._storedError;It(this,t),jt(this,t)}var r}get closed(){return bt(this)?this._closedPromise:f(Ot("closed"))}get desiredSize(){if(!bt(this))throw Ot("desiredSize");if(void 0===this._ownerWritableStream)throw Bt("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Rt(t._writableStreamController)}(this)}get ready(){return bt(this)?this._readyPromise:f(Ot("ready"))}abort(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("abort")):function(e,t){return at(e._ownerWritableStream,t)}(this,e):f(Ot("abort"))}close(){if(!bt(this))return f(Ot("close"));const e=this._ownerWritableStream;return void 0===e?f(Bt("close")):ct(e)?f(new TypeError("Cannot close an already-closing stream")):ht(this)}releaseLock(){if(!bt(this))throw Ot("releaseLock");void 0!==this._ownerWritableStream&&pt(this)}write(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("write to")):yt(this,e):f(Ot("write"))}}function bt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof WritableStreamDefaultWriter)}function ht(e){return it(e._ownerWritableStream)}function _t(e,t){"pending"===e._closedPromiseState?At(e,t):function(e,t){jt(e,t)}(e,t)}function mt(e,t){"pending"===e._readyPromiseState?Ft(e,t):function(e,t){It(e,t)}(e,t)}function pt(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");mt(e,r),_t(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function yt(e,t){const r=e._ownerWritableStream,o=r._writableStreamController,n=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Ct(e,t),1}}(o,t);if(r!==e._ownerWritableStream)return f(Bt("write to"));const a=r._state;if("errored"===a)return f(r._storedError);if(ct(r)||"closed"===a)return f(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return f(r._storedError);const i=function(e){return c(((t,r)=>{const o={_resolve:t,_reject:r};e._writeRequests.push(o)}))}(r);return function(e,t,r){try{de(e,t,r)}catch(t){return void Ct(e,t)}const o=e._controlledWritableStream;if(!ct(o)&&"writable"===o._state){ft(o,Pt(e))}Tt(e)}(o,t,n),i}Object.defineProperties(WritableStreamDefaultWriter.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultWriter.prototype,t.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const St={};class WritableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!gt(this))throw Wt("abortReason");return this._abortReason}get signal(){if(!gt(this))throw Wt("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(e){if(!gt(this))throw Wt("error");"writable"===this._controlledWritableStream._state&&qt(this,e)}[B](e){const t=this._abortAlgorithm(e);return wt(this),t}[k](){fe(this)}}function gt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof WritableStreamDefaultController)}function vt(e,t,r,o,n,a,i,l){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._abortReason=void 0,t._abortController=function(){if(et)return new AbortController}(),t._started=!1,t._strategySizeAlgorithm=l,t._strategyHWM=i,t._writeAlgorithm=o,t._closeAlgorithm=n,t._abortAlgorithm=a;const s=Pt(t);ft(e,s);h(d(r()),(()=>{t._started=!0,Tt(t)}),(r=>{t._started=!0,lt(e,r)}))}function wt(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Rt(e){return e._strategyHWM-e._queueTotalSize}function Tt(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void ut(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===St?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),ce(e);const r=e._closeAlgorithm();wt(e),h(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&zt(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),lt(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);h(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(ce(e),!ct(r)&&"writable"===t){const t=Pt(e);ft(r,t)}Tt(e)}),(t=>{"writable"===r._state&&wt(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,lt(e,t)}(r,t)}))}(e,r)}function Ct(e,t){"writable"===e._controlledWritableStream._state&&qt(e,t)}function Pt(e){return Rt(e)<=0}function qt(e,t){const r=e._controlledWritableStream;wt(e),st(r,t)}function Et(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Wt(e){return new TypeError(`WritableStreamDefaultController.prototype.${e} can only be used on a WritableStreamDefaultController`)}function Ot(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function Bt(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function kt(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function jt(e,t){kt(e),At(e,t)}function At(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function zt(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Dt(e){e._readyPromise=c(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function It(e,t){Dt(e),Ft(e,t)}function Lt(e){Dt(e),$t(e)}function Ft(e,t){void 0!==e._readyPromise_reject&&(y(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function $t(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(WritableStreamDefaultController.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultController.prototype,t.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const Mt="undefined"!=typeof DOMException?DOMException:void 0;const Qt=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Mt)?Mt:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return e.prototype=Object.create(Error.prototype),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,configurable:!0}),e}();function Yt(e,t,o,n,a,i){const l=H(e),s=tt(t);e._disturbed=!0;let u=!1,p=d(void 0);return c(((S,g)=>{let v;if(void 0!==i){if(v=()=>{const r=new Qt("Aborted","AbortError"),o=[];n||o.push((()=>"writable"===t._state?at(t,r):d(void 0))),a||o.push((()=>"readable"===e._state?br(e,r):d(void 0))),E((()=>Promise.all(o.map((e=>e())))),!0,r)},i.aborted)return void v();i.addEventListener("abort",v)}var w,R,T;if(q(e,l._closedPromise,(e=>{n?W(!0,e):E((()=>at(t,e)),!0,e)})),q(t,s._closedPromise,(t=>{a?W(!0,t):E((()=>br(e,t)),!0,t)})),w=e,R=l._closedPromise,T=()=>{o?W():E((()=>function(e){const t=e._ownerWritableStream,r=t._state;return ct(t)||"closed"===r?d(void 0):"errored"===r?f(t._storedError):ht(e)}(s)))},"closed"===w._state?T():_(R,T),ct(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");a?W(!0,t):E((()=>br(e,t)),!0,t)}function P(){const e=p;return b(p,(()=>e!==p?P():void 0))}function q(e,t,r){"errored"===e._state?r(e._storedError):m(t,r)}function E(e,r,o){function n(){h(e(),(()=>O(r,o)),(e=>O(!0,e)))}u||(u=!0,"writable"!==t._state||ct(t)?n():_(P(),n))}function W(e,r){u||(u=!0,"writable"!==t._state||ct(t)?O(e,r):_(P(),(()=>O(e,r))))}function O(e,t){pt(s),C(l),void 0!==i&&i.removeEventListener("abort",v),e?g(t):S(void 0)}y(c(((e,t)=>{!function o(n){n?e():b(u?d(!0):b(s._readyPromise,(()=>c(((e,t)=>{K(l,{_chunkSteps:t=>{p=b(yt(s,t),void 0,r),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),o,t)}(!1)})))}))}class ReadableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!xt(this))throw er("desiredSize");return Jt(this)}close(){if(!xt(this))throw er("close");if(!Kt(this))throw new TypeError("The stream is not in a state that permits close");Ut(this)}enqueue(e){if(!xt(this))throw er("enqueue");if(!Kt(this))throw new TypeError("The stream is not in a state that permits enqueue");return Gt(this,e)}error(e){if(!xt(this))throw er("error");Xt(this,e)}[j](e){fe(this);const t=this._cancelAlgorithm(e);return Vt(this),t}[A](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=ce(this);this._closeRequested&&0===this._queue.length?(Vt(this),hr(t)):Nt(this),e._chunkSteps(r)}else V(t,e),Nt(this)}}function xt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof ReadableStreamDefaultController)}function Nt(e){if(!Ht(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;h(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,Nt(e))}),(t=>{Xt(e,t)}))}function Ht(e){const t=e._controlledReadableStream;if(!Kt(e))return!1;if(!e._started)return!1;if(fr(t)&&G(t)>0)return!0;return Jt(e)>0}function Vt(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Ut(e){if(!Kt(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(Vt(e),hr(t))}function Gt(e,t){if(!Kt(e))return;const r=e._controlledReadableStream;if(fr(r)&&G(r)>0)U(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw Xt(e,t),t}try{de(e,t,r)}catch(t){throw Xt(e,t),t}}Nt(e)}function Xt(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(fe(e),Vt(e),_r(r,t))}function Jt(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Kt(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function Zt(e,t,r,o,n,a,i){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=i,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,e._readableStreamController=t;h(d(r()),(()=>{t._started=!0,Nt(t)}),(e=>{Xt(t,e)}))}function er(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function tr(e,t){return be(e._readableStreamController)?function(e){let t,r,o,n,a,i=H(e),l=!1,s=!1,u=!1,f=!1,b=!1;const h=c((e=>{a=e}));function _(e){m(e._closedPromise,(t=>{e===i&&(Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),f&&b||a(void 0))}))}function p(){Qe(i)&&(C(i),i=H(e),_(i));K(i,{_chunkSteps:t=>{S((()=>{s=!1,u=!1;const r=t;let i=t;if(!f&&!b)try{i=ue(t)}catch(t){return Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),void a(br(e,t))}f||We(o._readableStreamController,r),b||We(n._readableStreamController,i),l=!1,s?g():u&&v()}))},_closeSteps:()=>{l=!1,f||Ee(o._readableStreamController),b||Ee(n._readableStreamController),o._readableStreamController._pendingPullIntos.length>0&&je(o._readableStreamController,0),n._readableStreamController._pendingPullIntos.length>0&&je(n._readableStreamController,0),f&&b||a(void 0)},_errorSteps:()=>{l=!1}})}function y(t,r){J(i)&&(C(i),i=Le(e),_(i));const c=r?n:o,d=r?o:n;Ye(i,t,{_chunkSteps:t=>{S((()=>{s=!1,u=!1;const o=r?b:f;if(r?f:b)o||Ae(c._readableStreamController,t);else{let r;try{r=ue(t)}catch(t){return Oe(c._readableStreamController,t),Oe(d._readableStreamController,t),void a(br(e,t))}o||Ae(c._readableStreamController,t),We(d._readableStreamController,r)}l=!1,s?g():u&&v()}))},_closeSteps:e=>{l=!1;const t=r?b:f,o=r?f:b;t||Ee(c._readableStreamController),o||Ee(d._readableStreamController),void 0!==e&&(t||Ae(c._readableStreamController,e),!o&&d._readableStreamController._pendingPullIntos.length>0&&je(d._readableStreamController,0)),t&&o||a(void 0)},_errorSteps:()=>{l=!1}})}function g(){if(l)return s=!0,d(void 0);l=!0;const e=Be(o._readableStreamController);return null===e?p():y(e._view,!1),d(void 0)}function v(){if(l)return u=!0,d(void 0);l=!0;const e=Be(n._readableStreamController);return null===e?p():y(e._view,!0),d(void 0)}function w(o){if(f=!0,t=o,b){const o=ie([t,r]),n=br(e,o);a(n)}return h}function R(o){if(b=!0,r=o,f){const o=ie([t,r]),n=br(e,o);a(n)}return h}function T(){}return o=ur(T,g,w),n=ur(T,v,R),_(i),[o,n]}(e):function(e,t){const r=H(e);let o,n,a,i,l,s=!1,u=!1,f=!1,b=!1;const h=c((e=>{l=e}));function _(){if(s)return u=!0,d(void 0);s=!0;return K(r,{_chunkSteps:e=>{S((()=>{u=!1;const t=e,r=e;f||Gt(a._readableStreamController,t),b||Gt(i._readableStreamController,r),s=!1,u&&_()}))},_closeSteps:()=>{s=!1,f||Ut(a._readableStreamController),b||Ut(i._readableStreamController),f&&b||l(void 0)},_errorSteps:()=>{s=!1}}),d(void 0)}function p(t){if(f=!0,o=t,b){const t=ie([o,n]),r=br(e,t);l(r)}return h}function y(t){if(b=!0,n=t,f){const t=ie([o,n]),r=br(e,t);l(r)}return h}function g(){}return a=sr(g,_,p),i=sr(g,_,y),m(r._closedPromise,(e=>{Xt(a._readableStreamController,e),Xt(i._readableStreamController,e),f&&b||l(void 0)})),[a,i]}(e)}function rr(e,t,r){return L(e,r),r=>v(e,t,[r])}function or(e,t,r){return L(e,r),r=>v(e,t,[r])}function nr(e,t,r){return L(e,r),r=>g(e,t,[r])}function ar(e,t){if("bytes"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function ir(e,t){if("byob"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function lr(e,t){I(e,t);const r=null==e?void 0:e.preventAbort,o=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(`${t} is not an AbortSignal.`)}(a,`${t} has member 'signal' that`),{preventAbort:Boolean(r),preventCancel:Boolean(o),preventClose:Boolean(n),signal:a}}Object.defineProperties(ReadableStreamDefaultController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultController.prototype,t.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class ReadableStream{constructor(e={},t={}){void 0===e?e=null:F(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){I(e,t);const r=e,o=null==r?void 0:r.autoAllocateChunkSize,n=null==r?void 0:r.cancel,a=null==r?void 0:r.pull,i=null==r?void 0:r.start,l=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===o?void 0:x(o,`${t} has member 'autoAllocateChunkSize' that`),cancel:void 0===n?void 0:rr(n,r,`${t} has member 'cancel' that`),pull:void 0===a?void 0:or(a,r,`${t} has member 'pull' that`),start:void 0===i?void 0:nr(i,r,`${t} has member 'start' that`),type:void 0===l?void 0:ar(l,`${t} has member 'type' that`)}}(e,"First parameter");if(cr(this),"bytes"===o.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,t,r){const o=Object.create(ReadableByteStreamController.prototype);let n=()=>{},a=()=>d(void 0),i=()=>d(void 0);void 0!==t.start&&(n=()=>t.start(o)),void 0!==t.pull&&(a=()=>t.pull(o)),void 0!==t.cancel&&(i=e=>t.cancel(e));const l=t.autoAllocateChunkSize;if(0===l)throw new TypeError("autoAllocateChunkSize must be greater than 0");ze(e,o,n,a,i,r,l)}(this,o,Ne(r,0))}else{const e=He(r);!function(e,t,r,o){const n=Object.create(ReadableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n)),void 0!==t.pull&&(i=()=>t.pull(n)),void 0!==t.cancel&&(l=e=>t.cancel(e)),Zt(e,n,a,i,l,r,o)}(this,o,Ne(r,1),e)}}get locked(){if(!dr(this))throw mr("locked");return fr(this)}cancel(e){return dr(this)?fr(this)?f(new TypeError("Cannot cancel a stream that already has a reader")):br(this,e):f(mr("cancel"))}getReader(e){if(!dr(this))throw mr("getReader");return void 0===function(e,t){I(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:ir(r,`${t} has member 'mode' that`)}}(e,"First parameter").mode?H(this):Le(this)}pipeThrough(e,t={}){if(!dr(this))throw mr("pipeThrough");$(e,1,"pipeThrough");const r=function(e,t){I(e,t);const r=null==e?void 0:e.readable;M(r,"readable","ReadableWritablePair"),N(r,`${t} has member 'readable' that`);const o=null==e?void 0:e.writable;return M(o,"writable","ReadableWritablePair"),Ze(o,`${t} has member 'writable' that`),{readable:r,writable:o}}(e,"First parameter"),o=lr(t,"Second parameter");if(fr(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(nt(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return y(Yt(this,r.writable,o.preventClose,o.preventAbort,o.preventCancel,o.signal)),r.readable}pipeTo(e,t={}){if(!dr(this))return f(mr("pipeTo"));if(void 0===e)return f("Parameter 1 is required in 'pipeTo'.");if(!ot(e))return f(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=lr(t,"Second parameter")}catch(e){return f(e)}return fr(this)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):nt(e)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Yt(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!dr(this))throw mr("tee");return ie(tr(this))}values(e){if(!dr(this))throw mr("values");return function(e,t){const r=H(e),o=new te(r,t),n=Object.create(re);return n._asyncIteratorImpl=o,n}(this,function(e,t){I(e,t);const r=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(r)}}(e,"First parameter").preventCancel)}}function sr(e,t,r,o=1,n=(()=>1)){const a=Object.create(ReadableStream.prototype);cr(a);return Zt(a,Object.create(ReadableStreamDefaultController.prototype),e,t,r,o,n),a}function ur(e,t,r){const o=Object.create(ReadableStream.prototype);cr(o);return ze(o,Object.create(ReadableByteStreamController.prototype),e,t,r,0,void 0),o}function cr(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function dr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof ReadableStream)}function fr(e){return void 0!==e._reader}function br(e,t){if(e._disturbed=!0,"closed"===e._state)return d(void 0);if("errored"===e._state)return f(e._storedError);hr(e);const o=e._reader;void 0!==o&&Qe(o)&&(o._readIntoRequests.forEach((e=>{e._closeSteps(void 0)})),o._readIntoRequests=new w);return p(e._readableStreamController[j](t),r)}function hr(e){e._state="closed";const t=e._reader;void 0!==t&&(O(t),J(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new w))}function _r(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(W(r,t),J(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new w):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new w))}function mr(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function pr(e,t){I(e,t);const r=null==e?void 0:e.highWaterMark;return M(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Q(r)}}Object.defineProperties(ReadableStream.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStream.prototype,t.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof t.asyncIterator&&Object.defineProperty(ReadableStream.prototype,t.asyncIterator,{value:ReadableStream.prototype.values,writable:!0,configurable:!0});const yr=e=>e.byteLength;Object.defineProperty(yr,"name",{value:"size",configurable:!0});class ByteLengthQueuingStrategy{constructor(e){$(e,1,"ByteLengthQueuingStrategy"),e=pr(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!gr(this))throw Sr("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!gr(this))throw Sr("size");return yr}}function Sr(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function gr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof ByteLengthQueuingStrategy)}Object.defineProperties(ByteLengthQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ByteLengthQueuingStrategy.prototype,t.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const vr=()=>1;Object.defineProperty(vr,"name",{value:"size",configurable:!0});class CountQueuingStrategy{constructor(e){$(e,1,"CountQueuingStrategy"),e=pr(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Rr(this))throw wr("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Rr(this))throw wr("size");return vr}}function wr(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Rr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof CountQueuingStrategy)}function Tr(e,t,r){return L(e,r),r=>v(e,t,[r])}function Cr(e,t,r){return L(e,r),r=>g(e,t,[r])}function Pr(e,t,r){return L(e,r),(r,o)=>v(e,t,[r,o])}Object.defineProperties(CountQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(CountQueuingStrategy.prototype,t.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class TransformStream{constructor(e={},t={},r={}){void 0===e&&(e=null);const o=Ve(t,"Second parameter"),n=Ve(r,"Third parameter"),a=function(e,t){I(e,t);const r=null==e?void 0:e.flush,o=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Tr(r,e,`${t} has member 'flush' that`),readableType:o,start:void 0===n?void 0:Cr(n,e,`${t} has member 'start' that`),transform:void 0===a?void 0:Pr(a,e,`${t} has member 'transform' that`),writableType:i}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");const i=Ne(n,0),l=He(n),s=Ne(o,1),u=He(o);let b;!function(e,t,r,o,n,a){function i(){return t}function l(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return p(e._backpressureChangePromise,(()=>{const o=e._writable;if("erroring"===o._state)throw o._storedError;return Ar(r,t)}))}return Ar(r,t)}(e,t)}function s(t){return function(e,t){return Er(e,t),d(void 0)}(e,t)}function u(){return function(e){const t=e._readable,r=e._transformStreamController,o=r._flushAlgorithm();return kr(r),p(o,(()=>{if("errored"===t._state)throw t._storedError;Ut(t._readableStreamController)}),(r=>{throw Er(e,r),t._storedError}))}(e)}function c(){return function(e){return Or(e,!1),e._backpressureChangePromise}(e)}function f(t){return Wr(e,t),d(void 0)}e._writable=function(e,t,r,o,n=1,a=(()=>1)){const i=Object.create(WritableStream.prototype);return rt(i),vt(i,Object.create(WritableStreamDefaultController.prototype),e,t,r,o,n,a),i}(i,l,u,s,r,o),e._readable=sr(i,c,f,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Or(e,!0),e._transformStreamController=void 0}(this,c((e=>{b=e})),s,u,i,l),function(e,t){const r=Object.create(TransformStreamDefaultController.prototype);let o=e=>{try{return jr(r,e),d(void 0)}catch(e){return f(e)}},n=()=>d(void 0);void 0!==t.transform&&(o=e=>t.transform(e,r));void 0!==t.flush&&(n=()=>t.flush(r));!function(e,t,r,o){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=o}(e,r,o,n)}(this,a),void 0!==a.start?b(a.start(this._transformStreamController)):b(void 0)}get readable(){if(!qr(this))throw Dr("readable");return this._readable}get writable(){if(!qr(this))throw Dr("writable");return this._writable}}function qr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof TransformStream)}function Er(e,t){Xt(e._readable._readableStreamController,t),Wr(e,t)}function Wr(e,t){kr(e._transformStreamController),Ct(e._writable._writableStreamController,t),e._backpressure&&Or(e,!1)}function Or(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=c((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(TransformStream.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStream.prototype,t.toStringTag,{value:"TransformStream",configurable:!0});class TransformStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Br(this))throw zr("desiredSize");return Jt(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!Br(this))throw zr("enqueue");jr(this,e)}error(e){if(!Br(this))throw zr("error");var t;t=e,Er(this._controlledTransformStream,t)}terminate(){if(!Br(this))throw zr("terminate");!function(e){const t=e._controlledTransformStream;Ut(t._readable._readableStreamController);const r=new TypeError("TransformStream terminated");Wr(t,r)}(this)}}function Br(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof TransformStreamDefaultController)}function kr(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function jr(e,t){const r=e._controlledTransformStream,o=r._readable._readableStreamController;if(!Kt(o))throw new TypeError("Readable side is not in a state that permits enqueue");try{Gt(o,t)}catch(e){throw Wr(r,e),r._readable._storedError}(function(e){return!Ht(e)})(o)!==r._backpressure&&Or(r,!0)}function Ar(e,t){return p(e._transformAlgorithm(t),void 0,(t=>{throw Er(e._controlledTransformStream,t),t}))}function zr(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function Dr(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(TransformStreamDefaultController.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStreamDefaultController.prototype,t.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});const Ir={ReadableStream:ReadableStream,ReadableStreamDefaultController:ReadableStreamDefaultController,ReadableByteStreamController:ReadableByteStreamController,ReadableStreamBYOBRequest:ReadableStreamBYOBRequest,ReadableStreamDefaultReader:ReadableStreamDefaultReader,ReadableStreamBYOBReader:ReadableStreamBYOBReader,WritableStream:WritableStream,WritableStreamDefaultController:WritableStreamDefaultController,WritableStreamDefaultWriter:WritableStreamDefaultWriter,ByteLengthQueuingStrategy:ByteLengthQueuingStrategy,CountQueuingStrategy:CountQueuingStrategy,TransformStream:TransformStream,TransformStreamDefaultController:TransformStreamDefaultController};if(void 0!==o)for(const e in Ir)Object.prototype.hasOwnProperty.call(Ir,e)&&Object.defineProperty(o,e,{value:Ir[e],writable:!0,configurable:!0});e.ByteLengthQueuingStrategy=ByteLengthQueuingStrategy,e.CountQueuingStrategy=CountQueuingStrategy,e.ReadableByteStreamController=ReadableByteStreamController,e.ReadableStream=ReadableStream,e.ReadableStreamBYOBReader=ReadableStreamBYOBReader,e.ReadableStreamBYOBRequest=ReadableStreamBYOBRequest,e.ReadableStreamDefaultController=ReadableStreamDefaultController,e.ReadableStreamDefaultReader=ReadableStreamDefaultReader,e.TransformStream=TransformStream,e.TransformStreamDefaultController=TransformStreamDefaultController,e.WritableStream=WritableStream,e.WritableStreamDefaultController=WritableStreamDefaultController,e.WritableStreamDefaultWriter=WritableStreamDefaultWriter,Object.defineProperty(e,"__esModule",{value:!0})})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WebStreamsPolyfill={})}(this,(function(e){"use strict";const t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function r(){}const o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function n(e){return"object"==typeof e&&null!==e||"function"==typeof e}const a=r,i=Promise,l=Promise.prototype.then,s=Promise.resolve.bind(i),u=Promise.reject.bind(i);function c(e){return new i(e)}function d(e){return s(e)}function f(e){return u(e)}function b(e,t,r){return l.call(e,t,r)}function h(e,t,r){b(b(e,t,r),void 0,a)}function _(e,t){h(e,t)}function m(e,t){h(e,void 0,t)}function p(e,t,r){return b(e,t,r)}function y(e){b(e,void 0,a)}const S=(()=>{const e=o&&o.queueMicrotask;if("function"==typeof e)return e;const t=d(void 0);return e=>b(t,e)})();function g(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function v(e,t,r){try{return d(g(e,t,r))}catch(e){return f(e)}}class w{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let o=r+1;const n=e._elements,a=n[r];return 16384===o&&(t=e._next,o=0),--this._size,this._cursor=o,e!==t&&(this._front=t),n[r]=void 0,a}forEach(e){let t=this._cursor,r=this._front,o=r._elements;for(;!(t===o.length&&void 0===r._next||t===o.length&&(r=r._next,o=r._elements,t=0,0===o.length));)e(o[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function R(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?q(e):"closed"===t._state?function(e){q(e),O(e)}(e):E(e,t._storedError)}function T(e,t){return br(e._ownerReadableStream,t)}function C(e){"readable"===e._ownerReadableStream._state?W(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){E(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function P(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function q(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function E(e,t){q(e),W(e,t)}function W(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function O(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const B=t("[[AbortSteps]]"),k=t("[[ErrorSteps]]"),j=t("[[CancelSteps]]"),A=t("[[PullSteps]]"),z=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},D=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function I(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(`${t} is not an object.`);var r}function L(e,t){if("function"!=typeof e)throw new TypeError(`${t} is not a function.`)}function F(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(`${t} is not an object.`)}function $(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function M(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function Q(e){return Number(e)}function Y(e){return 0===e?0:e}function x(e,t){const r=Number.MAX_SAFE_INTEGER;let o=Number(e);if(o=Y(o),!z(o))throw new TypeError(`${t} is not a finite number`);if(o=function(e){return Y(D(e))}(o),o<0||o>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return z(o)&&0!==o?o:0}function N(e,t){if(!dr(e))throw new TypeError(`${t} is not a ReadableStream.`)}function H(e){return new ReadableStreamDefaultReader(e)}function V(e,t){e._reader._readRequests.push(t)}function U(e,t,r){const o=e._reader._readRequests.shift();r?o._closeSteps():o._chunkSteps(t)}function G(e){return e._reader._readRequests.length}function X(e){const t=e._reader;return void 0!==t&&!!J(t)}class ReadableStreamDefaultReader{constructor(e){if($(e,1,"ReadableStreamDefaultReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new w}get closed(){return J(this)?this._closedPromise:f(Z("closed"))}cancel(e){return J(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(Z("cancel"))}read(){if(!J(this))return f(Z("read"));if(void 0===this._ownerReadableStream)return f(P("read from"));let e,t;const r=c(((r,o)=>{e=r,t=o}));return K(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!J(this))throw Z("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function J(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof ReadableStreamDefaultReader)}function K(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[A](t)}function Z(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}let ee;Object.defineProperties(ReadableStreamDefaultReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultReader.prototype,t.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0}),"symbol"==typeof t.asyncIterator&&(ee={[t.asyncIterator](){return this}},Object.defineProperty(ee,t.asyncIterator,{enumerable:!1}));class te{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?p(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?p(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return f(P("iterate"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return K(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,S((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,C(e),r(t)}}),o}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return f(P("finish iterating"));if(!this._preventCancel){const r=T(t,e);return C(t),p(r,(()=>({value:e,done:!0})))}return C(t),d({value:e,done:!0})}}const re={next(){return oe(this)?this._asyncIteratorImpl.next():f(ne("next"))},return(e){return oe(this)?this._asyncIteratorImpl.return(e):f(ne("return"))}};function oe(e){if(!n(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof te}catch(e){return!1}}function ne(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==ee&&Object.setPrototypeOf(re,ee);const ae=Number.isNaN||function(e){return e!=e};function ie(e){return e.slice()}function le(e,t,r,o,n){new Uint8Array(e).set(new Uint8Array(r,o,n),t)}function se(e,t,r){if(e.slice)return e.slice(t,r);const o=r-t,n=new ArrayBuffer(o);return le(n,0,e,t,o),n}function ue(e){const t=se(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(t)}function ce(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function de(e,t,r){if("number"!=typeof(o=r)||ae(o)||o<0||r===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var o;e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function fe(e){e._queue=new w,e._queueTotalSize=0}class ReadableStreamBYOBRequest{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!he(this))throw De("view");return this._view}respond(e){if(!he(this))throw De("respond");if($(e,1,"respond"),e=x(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,je(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!he(this))throw De("respondWithNewView");if($(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Ae(this._associatedReadableByteStreamController,e)}}Object.defineProperties(ReadableStreamBYOBRequest.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBRequest.prototype,t.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class ReadableByteStreamController{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!be(this))throw Ie("byobRequest");return Be(this)}get desiredSize(){if(!be(this))throw Ie("desiredSize");return ke(this)}close(){if(!be(this))throw Ie("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);Ee(this)}enqueue(e){if(!be(this))throw Ie("enqueue");if($(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);We(this,e)}error(e){if(!be(this))throw Ie("error");Oe(this,e)}[j](e){me(this),fe(this);const t=this._cancelAlgorithm(e);return qe(this),t}[A](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,we(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const o={buffer:t,bufferByteLength:r,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(o)}V(t,e),_e(this)}}function be(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof ReadableByteStreamController)}function he(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof ReadableStreamBYOBRequest)}function _e(e){if(!function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(X(t)&&G(t)>0)return!0;if(Me(t)&&$e(t)>0)return!0;if(ke(e)>0)return!0;return!1}(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;h(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,_e(e))}),(t=>{Oe(e,t)}))}function me(e){Re(e),e._pendingPullIntos=new w}function pe(e,t){let r=!1;"closed"===e._state&&(r=!0);const o=ye(t);"default"===t.readerType?U(e,o,r):function(e,t,r){const o=e._reader._readIntoRequests.shift();r?o._closeSteps(t):o._chunkSteps(t)}(e,o,r)}function ye(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function Se(e,t,r,o){e._queue.push({buffer:t,byteOffset:r,byteLength:o}),e._queueTotalSize+=o}function ge(e,t){const r=t.elementSize,o=t.bytesFilled-t.bytesFilled%r,n=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),a=t.bytesFilled+n,i=a-a%r;let l=n,s=!1;i>o&&(l=i-t.bytesFilled,s=!0);const u=e._queue;for(;l>0;){const r=u.peek(),o=Math.min(l,r.byteLength),n=t.byteOffset+t.bytesFilled;le(t.buffer,n,r.buffer,r.byteOffset,o),r.byteLength===o?u.shift():(r.byteOffset+=o,r.byteLength-=o),e._queueTotalSize-=o,ve(e,o,t),l-=o}return s}function ve(e,t,r){r.bytesFilled+=t}function we(e){0===e._queueTotalSize&&e._closeRequested?(qe(e),hr(e._controlledReadableByteStream)):_e(e)}function Re(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Te(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();ge(e,t)&&(Pe(e),pe(e._controlledReadableByteStream,t))}}function Ce(e,t){const r=e._pendingPullIntos.peek();Re(e);"closed"===e._controlledReadableByteStream._state?function(e,t){const r=e._controlledReadableByteStream;if(Me(r))for(;$e(r)>0;)pe(r,Pe(e))}(e):function(e,t,r){if(ve(0,t,r),r.bytesFilled0){const t=r.byteOffset+r.bytesFilled,n=se(r.buffer,t-o,t);Se(e,n,0,n.byteLength)}r.bytesFilled-=o,pe(e._controlledReadableByteStream,r),Te(e)}(e,t,r),_e(e)}function Pe(e){return e._pendingPullIntos.shift()}function qe(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Ee(e){const t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Oe(e,t),t}}qe(e),hr(t)}}function We(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const o=t.buffer,n=t.byteOffset,a=t.byteLength,i=o;if(e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek();t.buffer,0,t.buffer=t.buffer}if(Re(e),X(r))if(0===G(r))Se(e,i,n,a);else{e._pendingPullIntos.length>0&&Pe(e);U(r,new Uint8Array(i,n,a),!1)}else Me(r)?(Se(e,i,n,a),Te(e)):Se(e,i,n,a);_e(e)}function Oe(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(me(e),fe(e),qe(e),_r(r,t))}function Be(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){const t=e._pendingPullIntos.peek(),r=new Uint8Array(t.buffer,t.byteOffset+t.bytesFilled,t.byteLength-t.bytesFilled),o=Object.create(ReadableStreamBYOBRequest.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(o,e,r),e._byobRequest=o}return e._byobRequest}function ke(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function je(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===t)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range")}r.buffer=r.buffer,Ce(e,t)}function Ae(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===t.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.bufferByteLength!==t.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(r.bytesFilled+t.byteLength>r.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");const o=t.byteLength;r.buffer=t.buffer,Ce(e,o)}function ze(e,t,r,o,n,a,i){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,fe(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,t._autoAllocateChunkSize=i,t._pendingPullIntos=new w,e._readableStreamController=t;h(d(r()),(()=>{t._started=!0,_e(t)}),(e=>{Oe(t,e)}))}function De(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function Ie(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function Le(e){return new ReadableStreamBYOBReader(e)}function Fe(e,t){e._reader._readIntoRequests.push(t)}function $e(e){return e._reader._readIntoRequests.length}function Me(e){const t=e._reader;return void 0!==t&&!!Qe(t)}Object.defineProperties(ReadableByteStreamController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableByteStreamController.prototype,t.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class ReadableStreamBYOBReader{constructor(e){if($(e,1,"ReadableStreamBYOBReader"),N(e,"First parameter"),fr(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!be(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new w}get closed(){return Qe(this)?this._closedPromise:f(xe("closed"))}cancel(e){return Qe(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(xe("cancel"))}read(e){if(!Qe(this))return f(xe("read"));if(!ArrayBuffer.isView(e))return f(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return f(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return f(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return f(P("read from"));let t,r;const o=c(((e,o)=>{t=e,r=o}));return Ye(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),o}releaseLock(){if(!Qe(this))throw xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}}}function Qe(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof ReadableStreamBYOBReader)}function Ye(e,t,r){const o=e._ownerReadableStream;o._disturbed=!0,"errored"===o._state?r._errorSteps(o._storedError):function(e,t,r){const o=e._controlledReadableByteStream;let n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);const a=t.constructor,i=t.buffer,l={buffer:i,bufferByteLength:i.byteLength,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(l),void Fe(o,r);if("closed"!==o._state){if(e._queueTotalSize>0){if(ge(e,l)){const t=ye(l);return we(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return Oe(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(l),Fe(o,r),_e(e)}else{const e=new a(l.buffer,l.byteOffset,0);r._closeSteps(e)}}(o._readableStreamController,t,r)}function xe(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function Ne(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(ae(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function He(e){const{size:t}=e;return t||(()=>1)}function Ve(e,t){I(e,t);const r=null==e?void 0:e.highWaterMark,o=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:Q(r),size:void 0===o?void 0:Ue(o,`${t} has member 'size' that`)}}function Ue(e,t){return L(e,t),t=>Q(e(t))}function Ge(e,t,r){return L(e,r),r=>v(e,t,[r])}function Xe(e,t,r){return L(e,r),()=>v(e,t,[])}function Je(e,t,r){return L(e,r),r=>g(e,t,[r])}function Ke(e,t,r){return L(e,r),(r,o)=>v(e,t,[r,o])}function Ze(e,t){if(!ot(e))throw new TypeError(`${t} is not a WritableStream.`)}Object.defineProperties(ReadableStreamBYOBReader.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamBYOBReader.prototype,t.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});const et="function"==typeof AbortController;class WritableStream{constructor(e={},t={}){void 0===e?e=null:F(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){I(e,t);const r=null==e?void 0:e.abort,o=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===r?void 0:Ge(r,e,`${t} has member 'abort' that`),close:void 0===o?void 0:Xe(o,e,`${t} has member 'close' that`),start:void 0===n?void 0:Je(n,e,`${t} has member 'start' that`),write:void 0===i?void 0:Ke(i,e,`${t} has member 'write' that`),type:a}}(e,"First parameter");rt(this);if(void 0!==o.type)throw new RangeError("Invalid type is specified");const n=He(r);!function(e,t,r,o){const n=Object.create(WritableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0),s=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n));void 0!==t.write&&(i=e=>t.write(e,n));void 0!==t.close&&(l=()=>t.close());void 0!==t.abort&&(s=e=>t.abort(e));vt(e,n,a,i,l,s,r,o)}(this,o,Ne(r,1),n)}get locked(){if(!ot(this))throw Et("locked");return nt(this)}abort(e){return ot(this)?nt(this)?f(new TypeError("Cannot abort a stream that already has a writer")):at(this,e):f(Et("abort"))}close(){return ot(this)?nt(this)?f(new TypeError("Cannot close a stream that already has a writer")):ct(this)?f(new TypeError("Cannot close an already-closing stream")):it(this):f(Et("close"))}getWriter(){if(!ot(this))throw Et("getWriter");return tt(this)}}function tt(e){return new WritableStreamDefaultWriter(e)}function rt(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new w,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function ot(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof WritableStream)}function nt(e){return void 0!==e._writer}function at(e,t){var r;if("closed"===e._state||"errored"===e._state)return d(void 0);e._writableStreamController._abortReason=t,null===(r=e._writableStreamController._abortController)||void 0===r||r.abort();const o=e._state;if("closed"===o||"errored"===o)return d(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let n=!1;"erroring"===o&&(n=!0,t=void 0);const a=c(((r,o)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:o,_reason:t,_wasAlreadyErroring:n}}));return e._pendingAbortRequest._promise=a,n||st(e,t),a}function it(e){const t=e._state;if("closed"===t||"errored"===t)return f(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=c(((t,r)=>{const o={_resolve:t,_reject:r};e._closeRequest=o})),o=e._writer;var n;return void 0!==o&&e._backpressure&&"writable"===t&&$t(o),de(n=e._writableStreamController,St,0),Tt(n),r}function lt(e,t){"writable"!==e._state?ut(e):st(e,t)}function st(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const o=e._writer;void 0!==o&&mt(o,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&&ut(e)}function ut(e){e._state="errored",e._writableStreamController[k]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new w,void 0===e._pendingAbortRequest)return void dt(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void dt(e);h(e._writableStreamController[B](r._reason),(()=>{r._resolve(),dt(e)}),(t=>{r._reject(t),dt(e)}))}function ct(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function dt(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&At(t,e._storedError)}function ft(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){Dt(e)}(r):$t(r)),e._backpressure=t}Object.defineProperties(WritableStream.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStream.prototype,t.toStringTag,{value:"WritableStream",configurable:!0});class WritableStreamDefaultWriter{constructor(e){if($(e,1,"WritableStreamDefaultWriter"),Ze(e,"First parameter"),nt(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!ct(e)&&e._backpressure?Dt(this):Lt(this),kt(this);else if("erroring"===t)It(this,e._storedError),kt(this);else if("closed"===t)Lt(this),kt(r=this),zt(r);else{const t=e._storedError;It(this,t),jt(this,t)}var r}get closed(){return bt(this)?this._closedPromise:f(Ot("closed"))}get desiredSize(){if(!bt(this))throw Ot("desiredSize");if(void 0===this._ownerWritableStream)throw Bt("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Rt(t._writableStreamController)}(this)}get ready(){return bt(this)?this._readyPromise:f(Ot("ready"))}abort(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("abort")):function(e,t){return at(e._ownerWritableStream,t)}(this,e):f(Ot("abort"))}close(){if(!bt(this))return f(Ot("close"));const e=this._ownerWritableStream;return void 0===e?f(Bt("close")):ct(e)?f(new TypeError("Cannot close an already-closing stream")):ht(this)}releaseLock(){if(!bt(this))throw Ot("releaseLock");void 0!==this._ownerWritableStream&&pt(this)}write(e){return bt(this)?void 0===this._ownerWritableStream?f(Bt("write to")):yt(this,e):f(Ot("write"))}}function bt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof WritableStreamDefaultWriter)}function ht(e){return it(e._ownerWritableStream)}function _t(e,t){"pending"===e._closedPromiseState?At(e,t):function(e,t){jt(e,t)}(e,t)}function mt(e,t){"pending"===e._readyPromiseState?Ft(e,t):function(e,t){It(e,t)}(e,t)}function pt(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");mt(e,r),_t(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function yt(e,t){const r=e._ownerWritableStream,o=r._writableStreamController,n=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Ct(e,t),1}}(o,t);if(r!==e._ownerWritableStream)return f(Bt("write to"));const a=r._state;if("errored"===a)return f(r._storedError);if(ct(r)||"closed"===a)return f(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return f(r._storedError);const i=function(e){return c(((t,r)=>{const o={_resolve:t,_reject:r};e._writeRequests.push(o)}))}(r);return function(e,t,r){try{de(e,t,r)}catch(t){return void Ct(e,t)}const o=e._controlledWritableStream;if(!ct(o)&&"writable"===o._state){ft(o,Pt(e))}Tt(e)}(o,t,n),i}Object.defineProperties(WritableStreamDefaultWriter.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultWriter.prototype,t.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const St={};class WritableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get abortReason(){if(!gt(this))throw Wt("abortReason");return this._abortReason}get signal(){if(!gt(this))throw Wt("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal}error(e){if(!gt(this))throw Wt("error");"writable"===this._controlledWritableStream._state&&qt(this,e)}[B](e){const t=this._abortAlgorithm(e);return wt(this),t}[k](){fe(this)}}function gt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof WritableStreamDefaultController)}function vt(e,t,r,o,n,a,i,l){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._abortReason=void 0,t._abortController=function(){if(et)return new AbortController}(),t._started=!1,t._strategySizeAlgorithm=l,t._strategyHWM=i,t._writeAlgorithm=o,t._closeAlgorithm=n,t._abortAlgorithm=a;const s=Pt(t);ft(e,s);h(d(r()),(()=>{t._started=!0,Tt(t)}),(r=>{t._started=!0,lt(e,r)}))}function wt(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Rt(e){return e._strategyHWM-e._queueTotalSize}function Tt(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void ut(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===St?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),ce(e);const r=e._closeAlgorithm();wt(e),h(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&zt(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),lt(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);h(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(ce(e),!ct(r)&&"writable"===t){const t=Pt(e);ft(r,t)}Tt(e)}),(t=>{"writable"===r._state&&wt(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,lt(e,t)}(r,t)}))}(e,r)}function Ct(e,t){"writable"===e._controlledWritableStream._state&&qt(e,t)}function Pt(e){return Rt(e)<=0}function qt(e,t){const r=e._controlledWritableStream;wt(e),st(r,t)}function Et(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Wt(e){return new TypeError(`WritableStreamDefaultController.prototype.${e} can only be used on a WritableStreamDefaultController`)}function Ot(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function Bt(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function kt(e){e._closedPromise=c(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function jt(e,t){kt(e),At(e,t)}function At(e,t){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function zt(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Dt(e){e._readyPromise=c(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function It(e,t){Dt(e),Ft(e,t)}function Lt(e){Dt(e),$t(e)}function Ft(e,t){void 0!==e._readyPromise_reject&&(y(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function $t(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(WritableStreamDefaultController.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(WritableStreamDefaultController.prototype,t.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const Mt="undefined"!=typeof DOMException?DOMException:void 0;const Qt=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Mt)?Mt:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return e.prototype=Object.create(Error.prototype),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,configurable:!0}),e}();function Yt(e,t,o,n,a,i){const l=H(e),s=tt(t);e._disturbed=!0;let u=!1,p=d(void 0);return c(((S,g)=>{let v;if(void 0!==i){if(v=()=>{const r=new Qt("Aborted","AbortError"),o=[];n||o.push((()=>"writable"===t._state?at(t,r):d(void 0))),a||o.push((()=>"readable"===e._state?br(e,r):d(void 0))),E((()=>Promise.all(o.map((e=>e())))),!0,r)},i.aborted)return void v();i.addEventListener("abort",v)}var w,R,T;if(q(e,l._closedPromise,(e=>{n?W(!0,e):E((()=>at(t,e)),!0,e)})),q(t,s._closedPromise,(t=>{a?W(!0,t):E((()=>br(e,t)),!0,t)})),w=e,R=l._closedPromise,T=()=>{o?W():E((()=>function(e){const t=e._ownerWritableStream,r=t._state;return ct(t)||"closed"===r?d(void 0):"errored"===r?f(t._storedError):ht(e)}(s)))},"closed"===w._state?T():_(R,T),ct(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");a?W(!0,t):E((()=>br(e,t)),!0,t)}function P(){const e=p;return b(p,(()=>e!==p?P():void 0))}function q(e,t,r){"errored"===e._state?r(e._storedError):m(t,r)}function E(e,r,o){function n(){h(e(),(()=>O(r,o)),(e=>O(!0,e)))}u||(u=!0,"writable"!==t._state||ct(t)?n():_(P(),n))}function W(e,r){u||(u=!0,"writable"!==t._state||ct(t)?O(e,r):_(P(),(()=>O(e,r))))}function O(e,t){pt(s),C(l),void 0!==i&&i.removeEventListener("abort",v),e?g(t):S(void 0)}y(c(((e,t)=>{!function o(n){n?e():b(u?d(!0):b(s._readyPromise,(()=>c(((e,t)=>{K(l,{_chunkSteps:t=>{p=b(yt(s,t),void 0,r),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),o,t)}(!1)})))}))}class ReadableStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!xt(this))throw er("desiredSize");return Jt(this)}close(){if(!xt(this))throw er("close");if(!Kt(this))throw new TypeError("The stream is not in a state that permits close");Ut(this)}enqueue(e){if(!xt(this))throw er("enqueue");if(!Kt(this))throw new TypeError("The stream is not in a state that permits enqueue");return Gt(this,e)}error(e){if(!xt(this))throw er("error");Xt(this,e)}[j](e){fe(this);const t=this._cancelAlgorithm(e);return Vt(this),t}[A](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=ce(this);this._closeRequested&&0===this._queue.length?(Vt(this),hr(t)):Nt(this),e._chunkSteps(r)}else V(t,e),Nt(this)}}function xt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof ReadableStreamDefaultController)}function Nt(e){if(!Ht(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;h(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,Nt(e))}),(t=>{Xt(e,t)}))}function Ht(e){const t=e._controlledReadableStream;if(!Kt(e))return!1;if(!e._started)return!1;if(fr(t)&&G(t)>0)return!0;return Jt(e)>0}function Vt(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Ut(e){if(!Kt(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(Vt(e),hr(t))}function Gt(e,t){if(!Kt(e))return;const r=e._controlledReadableStream;if(fr(r)&&G(r)>0)U(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw Xt(e,t),t}try{de(e,t,r)}catch(t){throw Xt(e,t),t}}Nt(e)}function Xt(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(fe(e),Vt(e),_r(r,t))}function Jt(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Kt(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function Zt(e,t,r,o,n,a,i){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,fe(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=i,t._strategyHWM=a,t._pullAlgorithm=o,t._cancelAlgorithm=n,e._readableStreamController=t;h(d(r()),(()=>{t._started=!0,Nt(t)}),(e=>{Xt(t,e)}))}function er(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function tr(e,t){return be(e._readableStreamController)?function(e){let t,r,o,n,a,i=H(e),l=!1,s=!1,u=!1,f=!1,b=!1;const h=c((e=>{a=e}));function _(e){m(e._closedPromise,(t=>{e===i&&(Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),f&&b||a(void 0))}))}function p(){Qe(i)&&(C(i),i=H(e),_(i));K(i,{_chunkSteps:t=>{S((()=>{s=!1,u=!1;const r=t;let i=t;if(!f&&!b)try{i=ue(t)}catch(t){return Oe(o._readableStreamController,t),Oe(n._readableStreamController,t),void a(br(e,t))}f||We(o._readableStreamController,r),b||We(n._readableStreamController,i),l=!1,s?g():u&&v()}))},_closeSteps:()=>{l=!1,f||Ee(o._readableStreamController),b||Ee(n._readableStreamController),o._readableStreamController._pendingPullIntos.length>0&&je(o._readableStreamController,0),n._readableStreamController._pendingPullIntos.length>0&&je(n._readableStreamController,0),f&&b||a(void 0)},_errorSteps:()=>{l=!1}})}function y(t,r){J(i)&&(C(i),i=Le(e),_(i));const c=r?n:o,d=r?o:n;Ye(i,t,{_chunkSteps:t=>{S((()=>{s=!1,u=!1;const o=r?b:f;if(r?f:b)o||Ae(c._readableStreamController,t);else{let r;try{r=ue(t)}catch(t){return Oe(c._readableStreamController,t),Oe(d._readableStreamController,t),void a(br(e,t))}o||Ae(c._readableStreamController,t),We(d._readableStreamController,r)}l=!1,s?g():u&&v()}))},_closeSteps:e=>{l=!1;const t=r?b:f,o=r?f:b;t||Ee(c._readableStreamController),o||Ee(d._readableStreamController),void 0!==e&&(t||Ae(c._readableStreamController,e),!o&&d._readableStreamController._pendingPullIntos.length>0&&je(d._readableStreamController,0)),t&&o||a(void 0)},_errorSteps:()=>{l=!1}})}function g(){if(l)return s=!0,d(void 0);l=!0;const e=Be(o._readableStreamController);return null===e?p():y(e._view,!1),d(void 0)}function v(){if(l)return u=!0,d(void 0);l=!0;const e=Be(n._readableStreamController);return null===e?p():y(e._view,!0),d(void 0)}function w(o){if(f=!0,t=o,b){const o=ie([t,r]),n=br(e,o);a(n)}return h}function R(o){if(b=!0,r=o,f){const o=ie([t,r]),n=br(e,o);a(n)}return h}function T(){}return o=ur(T,g,w),n=ur(T,v,R),_(i),[o,n]}(e):function(e,t){const r=H(e);let o,n,a,i,l,s=!1,u=!1,f=!1,b=!1;const h=c((e=>{l=e}));function _(){if(s)return u=!0,d(void 0);s=!0;return K(r,{_chunkSteps:e=>{S((()=>{u=!1;const t=e,r=e;f||Gt(a._readableStreamController,t),b||Gt(i._readableStreamController,r),s=!1,u&&_()}))},_closeSteps:()=>{s=!1,f||Ut(a._readableStreamController),b||Ut(i._readableStreamController),f&&b||l(void 0)},_errorSteps:()=>{s=!1}}),d(void 0)}function p(t){if(f=!0,o=t,b){const t=ie([o,n]),r=br(e,t);l(r)}return h}function y(t){if(b=!0,n=t,f){const t=ie([o,n]),r=br(e,t);l(r)}return h}function g(){}return a=sr(g,_,p),i=sr(g,_,y),m(r._closedPromise,(e=>{Xt(a._readableStreamController,e),Xt(i._readableStreamController,e),f&&b||l(void 0)})),[a,i]}(e)}function rr(e,t,r){return L(e,r),r=>v(e,t,[r])}function or(e,t,r){return L(e,r),r=>v(e,t,[r])}function nr(e,t,r){return L(e,r),r=>g(e,t,[r])}function ar(e,t){if("bytes"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function ir(e,t){if("byob"!==(e=`${e}`))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function lr(e,t){I(e,t);const r=null==e?void 0:e.preventAbort,o=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(`${t} is not an AbortSignal.`)}(a,`${t} has member 'signal' that`),{preventAbort:Boolean(r),preventCancel:Boolean(o),preventClose:Boolean(n),signal:a}}Object.defineProperties(ReadableStreamDefaultController.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStreamDefaultController.prototype,t.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class ReadableStream{constructor(e={},t={}){void 0===e?e=null:F(e,"First parameter");const r=Ve(t,"Second parameter"),o=function(e,t){I(e,t);const r=e,o=null==r?void 0:r.autoAllocateChunkSize,n=null==r?void 0:r.cancel,a=null==r?void 0:r.pull,i=null==r?void 0:r.start,l=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===o?void 0:x(o,`${t} has member 'autoAllocateChunkSize' that`),cancel:void 0===n?void 0:rr(n,r,`${t} has member 'cancel' that`),pull:void 0===a?void 0:or(a,r,`${t} has member 'pull' that`),start:void 0===i?void 0:nr(i,r,`${t} has member 'start' that`),type:void 0===l?void 0:ar(l,`${t} has member 'type' that`)}}(e,"First parameter");if(cr(this),"bytes"===o.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,t,r){const o=Object.create(ReadableByteStreamController.prototype);let n=()=>{},a=()=>d(void 0),i=()=>d(void 0);void 0!==t.start&&(n=()=>t.start(o)),void 0!==t.pull&&(a=()=>t.pull(o)),void 0!==t.cancel&&(i=e=>t.cancel(e));const l=t.autoAllocateChunkSize;if(0===l)throw new TypeError("autoAllocateChunkSize must be greater than 0");ze(e,o,n,a,i,r,l)}(this,o,Ne(r,0))}else{const e=He(r);!function(e,t,r,o){const n=Object.create(ReadableStreamDefaultController.prototype);let a=()=>{},i=()=>d(void 0),l=()=>d(void 0);void 0!==t.start&&(a=()=>t.start(n)),void 0!==t.pull&&(i=()=>t.pull(n)),void 0!==t.cancel&&(l=e=>t.cancel(e)),Zt(e,n,a,i,l,r,o)}(this,o,Ne(r,1),e)}}get locked(){if(!dr(this))throw mr("locked");return fr(this)}cancel(e){return dr(this)?fr(this)?f(new TypeError("Cannot cancel a stream that already has a reader")):br(this,e):f(mr("cancel"))}getReader(e){if(!dr(this))throw mr("getReader");return void 0===function(e,t){I(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:ir(r,`${t} has member 'mode' that`)}}(e,"First parameter").mode?H(this):Le(this)}pipeThrough(e,t={}){if(!dr(this))throw mr("pipeThrough");$(e,1,"pipeThrough");const r=function(e,t){I(e,t);const r=null==e?void 0:e.readable;M(r,"readable","ReadableWritablePair"),N(r,`${t} has member 'readable' that`);const o=null==e?void 0:e.writable;return M(o,"writable","ReadableWritablePair"),Ze(o,`${t} has member 'writable' that`),{readable:r,writable:o}}(e,"First parameter"),o=lr(t,"Second parameter");if(fr(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(nt(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return y(Yt(this,r.writable,o.preventClose,o.preventAbort,o.preventCancel,o.signal)),r.readable}pipeTo(e,t={}){if(!dr(this))return f(mr("pipeTo"));if(void 0===e)return f("Parameter 1 is required in 'pipeTo'.");if(!ot(e))return f(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=lr(t,"Second parameter")}catch(e){return f(e)}return fr(this)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):nt(e)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Yt(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!dr(this))throw mr("tee");return ie(tr(this))}values(e){if(!dr(this))throw mr("values");return function(e,t){const r=H(e),o=new te(r,t),n=Object.create(re);return n._asyncIteratorImpl=o,n}(this,function(e,t){I(e,t);const r=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(r)}}(e,"First parameter").preventCancel)}}function sr(e,t,r,o=1,n=(()=>1)){const a=Object.create(ReadableStream.prototype);cr(a);return Zt(a,Object.create(ReadableStreamDefaultController.prototype),e,t,r,o,n),a}function ur(e,t,r){const o=Object.create(ReadableStream.prototype);cr(o);return ze(o,Object.create(ReadableByteStreamController.prototype),e,t,r,0,void 0),o}function cr(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function dr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof ReadableStream)}function fr(e){return void 0!==e._reader}function br(e,t){if(e._disturbed=!0,"closed"===e._state)return d(void 0);if("errored"===e._state)return f(e._storedError);hr(e);const o=e._reader;void 0!==o&&Qe(o)&&(o._readIntoRequests.forEach((e=>{e._closeSteps(void 0)})),o._readIntoRequests=new w);return p(e._readableStreamController[j](t),r)}function hr(e){e._state="closed";const t=e._reader;void 0!==t&&(O(t),J(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new w))}function _r(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(W(r,t),J(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new w):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new w))}function mr(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function pr(e,t){I(e,t);const r=null==e?void 0:e.highWaterMark;return M(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Q(r)}}Object.defineProperties(ReadableStream.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ReadableStream.prototype,t.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof t.asyncIterator&&Object.defineProperty(ReadableStream.prototype,t.asyncIterator,{value:ReadableStream.prototype.values,writable:!0,configurable:!0});const yr=e=>e.byteLength;try{Object.defineProperty(yr,"name",{value:"size",configurable:!0})}catch(e){}class ByteLengthQueuingStrategy{constructor(e){$(e,1,"ByteLengthQueuingStrategy"),e=pr(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!gr(this))throw Sr("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!gr(this))throw Sr("size");return yr}}function Sr(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function gr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof ByteLengthQueuingStrategy)}Object.defineProperties(ByteLengthQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(ByteLengthQueuingStrategy.prototype,t.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const vr=()=>1;try{Object.defineProperty(vr,"name",{value:"size",configurable:!0})}catch(e){}class CountQueuingStrategy{constructor(e){$(e,1,"CountQueuingStrategy"),e=pr(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Rr(this))throw wr("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Rr(this))throw wr("size");return vr}}function wr(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Rr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof CountQueuingStrategy)}function Tr(e,t,r){return L(e,r),r=>v(e,t,[r])}function Cr(e,t,r){return L(e,r),r=>g(e,t,[r])}function Pr(e,t,r){return L(e,r),(r,o)=>v(e,t,[r,o])}Object.defineProperties(CountQueuingStrategy.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(CountQueuingStrategy.prototype,t.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class TransformStream{constructor(e={},t={},r={}){void 0===e&&(e=null);const o=Ve(t,"Second parameter"),n=Ve(r,"Third parameter"),a=function(e,t){I(e,t);const r=null==e?void 0:e.flush,o=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Tr(r,e,`${t} has member 'flush' that`),readableType:o,start:void 0===n?void 0:Cr(n,e,`${t} has member 'start' that`),transform:void 0===a?void 0:Pr(a,e,`${t} has member 'transform' that`),writableType:i}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");const i=Ne(n,0),l=He(n),s=Ne(o,1),u=He(o);let b;!function(e,t,r,o,n,a){function i(){return t}function l(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return p(e._backpressureChangePromise,(()=>{const o=e._writable;if("erroring"===o._state)throw o._storedError;return Ar(r,t)}))}return Ar(r,t)}(e,t)}function s(t){return function(e,t){return Er(e,t),d(void 0)}(e,t)}function u(){return function(e){const t=e._readable,r=e._transformStreamController,o=r._flushAlgorithm();return kr(r),p(o,(()=>{if("errored"===t._state)throw t._storedError;Ut(t._readableStreamController)}),(r=>{throw Er(e,r),t._storedError}))}(e)}function c(){return function(e){return Or(e,!1),e._backpressureChangePromise}(e)}function f(t){return Wr(e,t),d(void 0)}e._writable=function(e,t,r,o,n=1,a=(()=>1)){const i=Object.create(WritableStream.prototype);return rt(i),vt(i,Object.create(WritableStreamDefaultController.prototype),e,t,r,o,n,a),i}(i,l,u,s,r,o),e._readable=sr(i,c,f,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Or(e,!0),e._transformStreamController=void 0}(this,c((e=>{b=e})),s,u,i,l),function(e,t){const r=Object.create(TransformStreamDefaultController.prototype);let o=e=>{try{return jr(r,e),d(void 0)}catch(e){return f(e)}},n=()=>d(void 0);void 0!==t.transform&&(o=e=>t.transform(e,r));void 0!==t.flush&&(n=()=>t.flush(r));!function(e,t,r,o){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=o}(e,r,o,n)}(this,a),void 0!==a.start?b(a.start(this._transformStreamController)):b(void 0)}get readable(){if(!qr(this))throw Dr("readable");return this._readable}get writable(){if(!qr(this))throw Dr("writable");return this._writable}}function qr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof TransformStream)}function Er(e,t){Xt(e._readable._readableStreamController,t),Wr(e,t)}function Wr(e,t){kr(e._transformStreamController),Ct(e._writable._writableStreamController,t),e._backpressure&&Or(e,!1)}function Or(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=c((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(TransformStream.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStream.prototype,t.toStringTag,{value:"TransformStream",configurable:!0});class TransformStreamDefaultController{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!Br(this))throw zr("desiredSize");return Jt(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!Br(this))throw zr("enqueue");jr(this,e)}error(e){if(!Br(this))throw zr("error");var t;t=e,Er(this._controlledTransformStream,t)}terminate(){if(!Br(this))throw zr("terminate");!function(e){const t=e._controlledTransformStream;Ut(t._readable._readableStreamController);const r=new TypeError("TransformStream terminated");Wr(t,r)}(this)}}function Br(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof TransformStreamDefaultController)}function kr(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function jr(e,t){const r=e._controlledTransformStream,o=r._readable._readableStreamController;if(!Kt(o))throw new TypeError("Readable side is not in a state that permits enqueue");try{Gt(o,t)}catch(e){throw Wr(r,e),r._readable._storedError}(function(e){return!Ht(e)})(o)!==r._backpressure&&Or(r,!0)}function Ar(e,t){return p(e._transformAlgorithm(t),void 0,(t=>{throw Er(e._controlledTransformStream,t),t}))}function zr(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function Dr(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(TransformStreamDefaultController.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof t.toStringTag&&Object.defineProperty(TransformStreamDefaultController.prototype,t.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});const Ir={ReadableStream:ReadableStream,ReadableStreamDefaultController:ReadableStreamDefaultController,ReadableByteStreamController:ReadableByteStreamController,ReadableStreamBYOBRequest:ReadableStreamBYOBRequest,ReadableStreamDefaultReader:ReadableStreamDefaultReader,ReadableStreamBYOBReader:ReadableStreamBYOBReader,WritableStream:WritableStream,WritableStreamDefaultController:WritableStreamDefaultController,WritableStreamDefaultWriter:WritableStreamDefaultWriter,ByteLengthQueuingStrategy:ByteLengthQueuingStrategy,CountQueuingStrategy:CountQueuingStrategy,TransformStream:TransformStream,TransformStreamDefaultController:TransformStreamDefaultController};if(void 0!==o)for(const e in Ir)Object.prototype.hasOwnProperty.call(Ir,e)&&Object.defineProperty(o,e,{value:Ir[e],writable:!0,configurable:!0});e.ByteLengthQueuingStrategy=ByteLengthQueuingStrategy,e.CountQueuingStrategy=CountQueuingStrategy,e.ReadableByteStreamController=ReadableByteStreamController,e.ReadableStream=ReadableStream,e.ReadableStreamBYOBReader=ReadableStreamBYOBReader,e.ReadableStreamBYOBRequest=ReadableStreamBYOBRequest,e.ReadableStreamDefaultController=ReadableStreamDefaultController,e.ReadableStreamDefaultReader=ReadableStreamDefaultReader,e.TransformStream=TransformStream,e.TransformStreamDefaultController=TransformStreamDefaultController,e.WritableStream=WritableStream,e.WritableStreamDefaultController=WritableStreamDefaultController,e.WritableStreamDefaultWriter=WritableStreamDefaultWriter,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=polyfill.es6.min.js.map diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map b/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map index 8dd8559..33c6f9c 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.es6.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","noop","globals","self","window","global","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","SimpleQueue","[object Object]","this","_front","_elements","_next","_back","_cursor","_size","length","element","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","push","oldFront","newFront","oldCursor","newCursor","elements","callback","i","node","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","shift","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","IsReadableStreamLocked","closed","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","Object","hasOwnProperty","_disturbed","_readableStreamController","AsyncIteratorPrototype","defineProperties","cancel","enumerable","read","releaseLock","toStringTag","defineProperty","configurable","asyncIterator","ReadableStreamAsyncIteratorImpl","preventCancel","_preventCancel","nextSteps","_nextSteps","_ongoingPromise","returnSteps","_returnSteps","_isFinished","result","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","next","streamAsyncIteratorBrandCheckException","return","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","pair","_queue","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","view","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","isView","ReadableByteStreamControllerRespondWithNewView","respond","respondWithNewView","ReadableByteStreamController","byobRequest","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","desiredSize","ReadableByteStreamControllerGetDesiredSize","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","peek","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","close","enqueue","error","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","AbortController","WritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","locked","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","forEach","writeRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","abortRequest","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","getWriter","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","abortReason","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","createDOMExceptionPolyfill","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","actions","shutdownWithAction","all","map","action","aborted","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","isAbortSignal","assertAbortSignal","Boolean","ReadableStream","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","rawOptions","convertReaderOptions","rawTransform","transform","readable","convertReadableWritablePair","destination","impl","AcquireReadableStreamAsyncIterator","convertIteratorOptions","convertQueuingStrategyInit","getReader","pipeThrough","pipeTo","tee","values","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","TransformStream","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise_resolve","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStream","IsTransformStreamDefaultController","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","terminate","exports","prop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.es6.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","noop","globals","self","window","global","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","SimpleQueue","[object Object]","this","_front","_elements","_next","_back","_cursor","_size","length","element","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","push","oldFront","newFront","oldCursor","newCursor","elements","callback","i","node","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","shift","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","IsReadableStreamLocked","closed","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","Object","hasOwnProperty","_disturbed","_readableStreamController","AsyncIteratorPrototype","defineProperties","cancel","enumerable","read","releaseLock","toStringTag","defineProperty","configurable","asyncIterator","ReadableStreamAsyncIteratorImpl","preventCancel","_preventCancel","nextSteps","_nextSteps","_ongoingPromise","returnSteps","_returnSteps","_isFinished","result","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","next","streamAsyncIteratorBrandCheckException","return","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","pair","_queue","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","view","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","isView","ReadableByteStreamControllerRespondWithNewView","respond","respondWithNewView","ReadableByteStreamController","byobRequest","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","desiredSize","ReadableByteStreamControllerGetDesiredSize","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","peek","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","close","enqueue","error","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","AbortController","WritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","locked","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","forEach","writeRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","abortRequest","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","getWriter","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","abortReason","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","createDOMExceptionPolyfill","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","actions","shutdownWithAction","all","map","action","aborted","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","isAbortSignal","assertAbortSignal","Boolean","ReadableStream","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","rawOptions","convertReaderOptions","rawTransform","transform","readable","convertReadableWritablePair","destination","impl","AcquireReadableStreamAsyncIterator","convertIteratorOptions","convertQueuingStrategyInit","getReader","pipeThrough","pipeTo","tee","values","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","TransformStream","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise_resolve","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStream","IsTransformStreamDefaultController","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","terminate","exports","prop"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs b/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs index a3af72a..a405cd1 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs +++ b/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ /// const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? @@ -3707,10 +3707,16 @@ function convertQueuingStrategyInit(init, context) { const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; -Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3769,10 +3775,16 @@ function IsByteLengthQueuingStrategy(x) { const countSizeFunction = () => { return 1; }; -Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map b/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map index de6a6a3..4eeea29 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.es6.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.es6.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.js b/node_modules/web-streams-polyfill/dist/polyfill.js index be1b425..d985d05 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.js +++ b/node_modules/web-streams-polyfill/dist/polyfill.js @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -3806,10 +3806,16 @@ var byteLengthSizeFunction = function (chunk) { return chunk.byteLength; }; - Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3877,10 +3883,16 @@ var countSizeFunction = function () { return 1; }; - Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/polyfill.js.map b/node_modules/web-streams-polyfill/dist/polyfill.js.map index 1530e43..dfbc396 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.js.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.js.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","exports"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","exports"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.min.js b/node_modules/web-streams-polyfill/dist/polyfill.min.js index db59dd2..98a7694 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.min.js +++ b/node_modules/web-streams-polyfill/dist/polyfill.min.js @@ -1,2 +1,2 @@ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).WebStreamsPolyfill={})}(this,(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:function(e){return"Symbol("+e+")"};function t(){}var o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function n(e){return"object"==typeof e&&null!==e||"function"==typeof e}var a=t,i=Promise,l=Promise.prototype.then,u=Promise.resolve.bind(i),s=Promise.reject.bind(i);function c(e){return new i(e)}function d(e){return u(e)}function f(e){return s(e)}function b(e,r,t){return l.call(e,r,t)}function p(e,r,t){b(b(e,r,t),void 0,a)}function _(e,r){p(e,r)}function h(e,r){p(e,void 0,r)}function m(e,r,t){return b(e,r,t)}function y(e){b(e,void 0,a)}var v=function(){var e=o&&o.queueMicrotask;if("function"==typeof e)return e;var r=d(void 0);return function(e){return b(r,e)}}();function g(e,r,t){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,r,t)}function S(e,r,t){try{return d(g(e,r,t))}catch(e){return f(e)}}var w=function(){function e(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}return Object.defineProperty(e.prototype,"length",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.push=function(e){var r=this._back,t=r;16383===r._elements.length&&(t={_elements:[],_next:void 0}),r._elements.push(e),t!==r&&(this._back=t,r._next=t),++this._size},e.prototype.shift=function(){var e=this._front,r=e,t=this._cursor,o=t+1,n=e._elements,a=n[t];return 16384===o&&(r=e._next,o=0),--this._size,this._cursor=o,e!==r&&(this._front=r),n[t]=void 0,a},e.prototype.forEach=function(e){for(var r=this._cursor,t=this._front,o=t._elements;!(r===o.length&&void 0===t._next||r===o.length&&(r=0,0===(o=(t=t._next)._elements).length));)e(o[r]),++r},e.prototype.peek=function(){var e=this._front,r=this._cursor;return e._elements[r]},e}();function R(e,r){e._ownerReadableStream=r,r._reader=e,"readable"===r._state?q(e):"closed"===r._state?function(e){q(e),W(e)}(e):O(e,r._storedError)}function T(e,r){return Tt(e._ownerReadableStream,r)}function C(e){"readable"===e._ownerReadableStream._state?E(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,r){O(e,r)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function P(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function q(e){e._closedPromise=c((function(r,t){e._closedPromise_resolve=r,e._closedPromise_reject=t}))}function O(e,r){q(e),E(e,r)}function E(e,r){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(r),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function W(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}var j=r("[[AbortSteps]]"),B=r("[[ErrorSteps]]"),k=r("[[CancelSteps]]"),A=r("[[PullSteps]]"),z=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},D=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function I(e,r){if(void 0!==e&&("object"!=typeof(t=e)&&"function"!=typeof t))throw new TypeError(r+" is not an object.");var t}function F(e,r){if("function"!=typeof e)throw new TypeError(r+" is not a function.")}function L(e,r){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(r+" is not an object.")}function M(e,r,t){if(void 0===e)throw new TypeError("Parameter "+r+" is required in '"+t+"'.")}function Q(e,r,t){if(void 0===e)throw new TypeError(r+" is required in '"+t+"'.")}function Y(e){return Number(e)}function x(e){return 0===e?0:e}function N(e,r){var t=Number.MAX_SAFE_INTEGER,o=Number(e);if(o=x(o),!z(o))throw new TypeError(r+" is not a finite number");if((o=function(e){return x(D(e))}(o))<0||o>t)throw new TypeError(r+" is outside the accepted range of 0 to "+t+", inclusive");return z(o)&&0!==o?o:0}function H(e,r){if(!wt(e))throw new TypeError(r+" is not a ReadableStream.")}function V(e){return new $(e)}function U(e,r){e._reader._readRequests.push(r)}function G(e,r,t){var o=e._reader._readRequests.shift();t?o._closeSteps():o._chunkSteps(r)}function X(e){return e._reader._readRequests.length}function J(e){var r=e._reader;return void 0!==r&&!!ee(r)}var K,Z,$=function(){function ReadableStreamDefaultReader(e){if(M(e,1,"ReadableStreamDefaultReader"),H(e,"First parameter"),Rt(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new w}return Object.defineProperty(ReadableStreamDefaultReader.prototype,"closed",{get:function(){return ee(this)?this._closedPromise:f(te("closed"))},enumerable:!1,configurable:!0}),ReadableStreamDefaultReader.prototype.cancel=function(e){return void 0===e&&(e=void 0),ee(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(te("cancel"))},ReadableStreamDefaultReader.prototype.read=function(){if(!ee(this))return f(te("read"));if(void 0===this._ownerReadableStream)return f(P("read from"));var e,r,t=c((function(t,o){e=t,r=o}));return re(this,{_chunkSteps:function(r){return e({value:r,done:!1})},_closeSteps:function(){return e({value:void 0,done:!0})},_errorSteps:function(e){return r(e)}}),t},ReadableStreamDefaultReader.prototype.releaseLock=function(){if(!ee(this))throw te("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}},ReadableStreamDefaultReader}();function ee(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof $)}function re(e,r){var t=e._ownerReadableStream;t._disturbed=!0,"closed"===t._state?r._closeSteps():"errored"===t._state?r._errorSteps(t._storedError):t._readableStreamController[A](r)}function te(e){return new TypeError("ReadableStreamDefaultReader.prototype."+e+" can only be used on a ReadableStreamDefaultReader")}Object.defineProperties($.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty($.prototype,r.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0}),"symbol"==typeof r.asyncIterator&&((K={})[r.asyncIterator]=function(){return this},Z=K,Object.defineProperty(Z,r.asyncIterator,{enumerable:!1}));var oe=function(){function e(e,r){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=r}return e.prototype.next=function(){var e=this,r=function(){return e._nextSteps()};return this._ongoingPromise=this._ongoingPromise?m(this._ongoingPromise,r,r):r(),this._ongoingPromise},e.prototype.return=function(e){var r=this,t=function(){return r._returnSteps(e)};return this._ongoingPromise?m(this._ongoingPromise,t,t):t()},e.prototype._nextSteps=function(){var e=this;if(this._isFinished)return Promise.resolve({value:void 0,done:!0});var r,t,o=this._reader;if(void 0===o._ownerReadableStream)return f(P("iterate"));var n=c((function(e,o){r=e,t=o}));return re(o,{_chunkSteps:function(t){e._ongoingPromise=void 0,v((function(){return r({value:t,done:!1})}))},_closeSteps:function(){e._ongoingPromise=void 0,e._isFinished=!0,C(o),r({value:void 0,done:!0})},_errorSteps:function(r){e._ongoingPromise=void 0,e._isFinished=!0,C(o),t(r)}}),n},e.prototype._returnSteps=function(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;var r=this._reader;if(void 0===r._ownerReadableStream)return f(P("finish iterating"));if(!this._preventCancel){var t=T(r,e);return C(r),m(t,(function(){return{value:e,done:!0}}))}return C(r),d({value:e,done:!0})},e}(),ne={next:function(){return ae(this)?this._asyncIteratorImpl.next():f(ie("next"))},return:function(e){return ae(this)?this._asyncIteratorImpl.return(e):f(ie("return"))}};function ae(e){if(!n(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof oe}catch(e){return!1}}function ie(e){return new TypeError("ReadableStreamAsyncIterator."+e+" can only be used on a ReadableSteamAsyncIterator")}void 0!==Z&&Object.setPrototypeOf(ne,Z);var le=Number.isNaN||function(e){return e!=e};function ue(e){return e.slice()}function se(e,r,t,o,n){new Uint8Array(e).set(new Uint8Array(t,o,n),r)}function ce(e,r,t){if(e.slice)return e.slice(r,t);var o=t-r,n=new ArrayBuffer(o);return se(n,0,e,r,o),n}function de(e){var r=ce(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(r)}function fe(e){var r=e._queue.shift();return e._queueTotalSize-=r.size,e._queueTotalSize<0&&(e._queueTotalSize=0),r.value}function be(e,r,t){if("number"!=typeof(o=t)||le(o)||o<0||t===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var o;e._queue.push({value:r,size:t}),e._queueTotalSize+=t}function pe(e){e._queue=new w,e._queueTotalSize=0}var _e=function(){function ReadableStreamBYOBRequest(){throw new TypeError("Illegal constructor")}return Object.defineProperty(ReadableStreamBYOBRequest.prototype,"view",{get:function(){if(!ye(this))throw Me("view");return this._view},enumerable:!1,configurable:!0}),ReadableStreamBYOBRequest.prototype.respond=function(e){if(!ye(this))throw Me("respond");if(M(e,1,"respond"),e=N(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,Ie(this._associatedReadableByteStreamController,e)},ReadableStreamBYOBRequest.prototype.respondWithNewView=function(e){if(!ye(this))throw Me("respondWithNewView");if(M(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Fe(this._associatedReadableByteStreamController,e)},ReadableStreamBYOBRequest}();Object.defineProperties(_e.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(_e.prototype,r.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});var he=function(){function ReadableByteStreamController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(ReadableByteStreamController.prototype,"byobRequest",{get:function(){if(!me(this))throw Qe("byobRequest");return ze(this)},enumerable:!1,configurable:!0}),Object.defineProperty(ReadableByteStreamController.prototype,"desiredSize",{get:function(){if(!me(this))throw Qe("desiredSize");return De(this)},enumerable:!1,configurable:!0}),ReadableByteStreamController.prototype.close=function(){if(!me(this))throw Qe("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");var e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError("The stream (in "+e+" state) is not in the readable state and cannot be closed");Be(this)},ReadableByteStreamController.prototype.enqueue=function(e){if(!me(this))throw Qe("enqueue");if(M(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");var r=this._controlledReadableByteStream._state;if("readable"!==r)throw new TypeError("The stream (in "+r+" state) is not in the readable state and cannot be enqueued to");ke(this,e)},ReadableByteStreamController.prototype.error=function(e){if(void 0===e&&(e=void 0),!me(this))throw Qe("error");Ae(this,e)},ReadableByteStreamController.prototype[k]=function(e){ge(this),pe(this);var r=this._cancelAlgorithm(e);return je(this),r},ReadableByteStreamController.prototype[A]=function(e){var r=this._controlledReadableByteStream;if(this._queueTotalSize>0){var t=this._queue.shift();this._queueTotalSize-=t.byteLength,Pe(this);var o=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);e._chunkSteps(o)}else{var n=this._autoAllocateChunkSize;if(void 0!==n){var a=void 0;try{a=new ArrayBuffer(n)}catch(r){return void e._errorSteps(r)}var i={buffer:a,bufferByteLength:n,byteOffset:0,byteLength:n,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(i)}U(r,e),ve(this)}},ReadableByteStreamController}();function me(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof he)}function ye(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof _e)}function ve(e){(function(e){var r=e._controlledReadableByteStream;if("readable"!==r._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(J(r)&&X(r)>0)return!0;if(He(r)&&Ne(r)>0)return!0;if(De(e)>0)return!0;return!1})(e)&&(e._pulling?e._pullAgain=!0:(e._pulling=!0,p(e._pullAlgorithm(),(function(){e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ve(e))}),(function(r){Ae(e,r)}))))}function ge(e){qe(e),e._pendingPullIntos=new w}function Se(e,r){var t=!1;"closed"===e._state&&(t=!0);var o=we(r);"default"===r.readerType?G(e,o,t):function(e,r,t){var o=e._reader._readIntoRequests.shift();t?o._closeSteps(r):o._chunkSteps(r)}(e,o,t)}function we(e){var r=e.bytesFilled,t=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,r/t)}function Re(e,r,t,o){e._queue.push({buffer:r,byteOffset:t,byteLength:o}),e._queueTotalSize+=o}function Te(e,r){var t=r.elementSize,o=r.bytesFilled-r.bytesFilled%t,n=Math.min(e._queueTotalSize,r.byteLength-r.bytesFilled),a=r.bytesFilled+n,i=a-a%t,l=n,u=!1;i>o&&(l=i-r.bytesFilled,u=!0);for(var s=e._queue;l>0;){var c=s.peek(),d=Math.min(l,c.byteLength),f=r.byteOffset+r.bytesFilled;se(r.buffer,f,c.buffer,c.byteOffset,d),c.byteLength===d?s.shift():(c.byteOffset+=d,c.byteLength-=d),e._queueTotalSize-=d,Ce(e,d,r),l-=d}return u}function Ce(e,r,t){t.bytesFilled+=r}function Pe(e){0===e._queueTotalSize&&e._closeRequested?(je(e),Ct(e._controlledReadableByteStream)):ve(e)}function qe(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Oe(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;var r=e._pendingPullIntos.peek();Te(e,r)&&(We(e),Se(e._controlledReadableByteStream,r))}}function Ee(e,r){var t=e._pendingPullIntos.peek();qe(e),"closed"===e._controlledReadableByteStream._state?function(e,r){var t=e._controlledReadableByteStream;if(He(t))for(;Ne(t)>0;)Se(t,We(e))}(e):function(e,r,t){if(Ce(0,r,t),!(t.bytesFilled0){var n=t.byteOffset+t.bytesFilled,a=ce(t.buffer,n-o,n);Re(e,a,0,a.byteLength)}t.bytesFilled-=o,Se(e._controlledReadableByteStream,t),Oe(e)}}(e,r,t),ve(e)}function We(e){return e._pendingPullIntos.shift()}function je(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Be(e){var r=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===r._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0)if(e._pendingPullIntos.peek().bytesFilled>0){var t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Ae(e,t),t}je(e),Ct(r)}}function ke(e,r){var t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state){var o=r.buffer,n=r.byteOffset,a=r.byteLength,i=o;if(e._pendingPullIntos.length>0){var l=e._pendingPullIntos.peek();l.buffer,0,l.buffer=l.buffer}if(qe(e),J(t))if(0===X(t))Re(e,i,n,a);else e._pendingPullIntos.length>0&&We(e),G(t,new Uint8Array(i,n,a),!1);else He(t)?(Re(e,i,n,a),Oe(e)):Re(e,i,n,a);ve(e)}}function Ae(e,r){var t=e._controlledReadableByteStream;"readable"===t._state&&(ge(e),pe(e),je(e),Pt(t,r))}function ze(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){var r=e._pendingPullIntos.peek(),t=new Uint8Array(r.buffer,r.byteOffset+r.bytesFilled,r.byteLength-r.bytesFilled),o=Object.create(_e.prototype);!function(e,r,t){e._associatedReadableByteStreamController=r,e._view=t}(o,e,t),e._byobRequest=o}return e._byobRequest}function De(e){var r=e._controlledReadableByteStream._state;return"errored"===r?null:"closed"===r?0:e._strategyHWM-e._queueTotalSize}function Ie(e,r){var t=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==r)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===r)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(t.bytesFilled+r>t.byteLength)throw new RangeError("bytesWritten out of range")}t.buffer=t.buffer,Ee(e,r)}function Fe(e,r){var t=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==r.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===r.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(t.byteOffset+t.bytesFilled!==r.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(t.bufferByteLength!==r.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(t.bytesFilled+r.byteLength>t.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");var o=r.byteLength;t.buffer=r.buffer,Ee(e,o)}function Le(e,r,t,o,n,a,i){r._controlledReadableByteStream=e,r._pullAgain=!1,r._pulling=!1,r._byobRequest=null,r._queue=r._queueTotalSize=void 0,pe(r),r._closeRequested=!1,r._started=!1,r._strategyHWM=a,r._pullAlgorithm=o,r._cancelAlgorithm=n,r._autoAllocateChunkSize=i,r._pendingPullIntos=new w,e._readableStreamController=r,p(d(t()),(function(){r._started=!0,ve(r)}),(function(e){Ae(r,e)}))}function Me(e){return new TypeError("ReadableStreamBYOBRequest.prototype."+e+" can only be used on a ReadableStreamBYOBRequest")}function Qe(e){return new TypeError("ReadableByteStreamController.prototype."+e+" can only be used on a ReadableByteStreamController")}function Ye(e){return new Ve(e)}function xe(e,r){e._reader._readIntoRequests.push(r)}function Ne(e){return e._reader._readIntoRequests.length}function He(e){var r=e._reader;return void 0!==r&&!!Ue(r)}Object.defineProperties(he.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(he.prototype,r.toStringTag,{value:"ReadableByteStreamController",configurable:!0});var Ve=function(){function ReadableStreamBYOBReader(e){if(M(e,1,"ReadableStreamBYOBReader"),H(e,"First parameter"),Rt(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!me(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new w}return Object.defineProperty(ReadableStreamBYOBReader.prototype,"closed",{get:function(){return Ue(this)?this._closedPromise:f(Xe("closed"))},enumerable:!1,configurable:!0}),ReadableStreamBYOBReader.prototype.cancel=function(e){return void 0===e&&(e=void 0),Ue(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(Xe("cancel"))},ReadableStreamBYOBReader.prototype.read=function(e){if(!Ue(this))return f(Xe("read"));if(!ArrayBuffer.isView(e))return f(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return f(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return f(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return f(P("read from"));var r,t,o=c((function(e,o){r=e,t=o}));return Ge(this,e,{_chunkSteps:function(e){return r({value:e,done:!1})},_closeSteps:function(e){return r({value:e,done:!0})},_errorSteps:function(e){return t(e)}}),o},ReadableStreamBYOBReader.prototype.releaseLock=function(){if(!Ue(this))throw Xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}},ReadableStreamBYOBReader}();function Ue(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof Ve)}function Ge(e,r,t){var o=e._ownerReadableStream;o._disturbed=!0,"errored"===o._state?t._errorSteps(o._storedError):function(e,r,t){var o=e._controlledReadableByteStream,n=1;r.constructor!==DataView&&(n=r.constructor.BYTES_PER_ELEMENT);var a=r.constructor,i=r.buffer,l={buffer:i,bufferByteLength:i.byteLength,byteOffset:r.byteOffset,byteLength:r.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(l),void xe(o,t);if("closed"!==o._state){if(e._queueTotalSize>0){if(Te(e,l)){var u=we(l);return Pe(e),void t._chunkSteps(u)}if(e._closeRequested){var s=new TypeError("Insufficient bytes to fill elements in the given buffer");return Ae(e,s),void t._errorSteps(s)}}e._pendingPullIntos.push(l),xe(o,t),ve(e)}else{var c=new a(l.buffer,l.byteOffset,0);t._closeSteps(c)}}(o._readableStreamController,r,t)}function Xe(e){return new TypeError("ReadableStreamBYOBReader.prototype."+e+" can only be used on a ReadableStreamBYOBReader")}function Je(e,r){var t=e.highWaterMark;if(void 0===t)return r;if(le(t)||t<0)throw new RangeError("Invalid highWaterMark");return t}function Ke(e){var r=e.size;return r||function(){return 1}}function Ze(e,r){I(e,r);var t=null==e?void 0:e.highWaterMark,o=null==e?void 0:e.size;return{highWaterMark:void 0===t?void 0:Y(t),size:void 0===o?void 0:$e(o,r+" has member 'size' that")}}function $e(e,r){return F(e,r),function(r){return Y(e(r))}}function er(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function rr(e,r,t){return F(e,t),function(){return S(e,r,[])}}function tr(e,r,t){return F(e,t),function(t){return g(e,r,[t])}}function or(e,r,t){return F(e,t),function(t,o){return S(e,r,[t,o])}}function nr(e,r){if(!sr(e))throw new TypeError(r+" is not a WritableStream.")}Object.defineProperties(Ve.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Ve.prototype,r.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});var ar="function"==typeof AbortController;var ir=function(){function WritableStream(e,r){void 0===e&&(e={}),void 0===r&&(r={}),void 0===e?e=null:L(e,"First parameter");var t=Ze(r,"Second parameter"),o=function(e,r){I(e,r);var t=null==e?void 0:e.abort,o=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===t?void 0:er(t,e,r+" has member 'abort' that"),close:void 0===o?void 0:rr(o,e,r+" has member 'close' that"),start:void 0===n?void 0:tr(n,e,r+" has member 'start' that"),write:void 0===i?void 0:or(i,e,r+" has member 'write' that"),type:a}}(e,"First parameter");if(ur(this),void 0!==o.type)throw new RangeError("Invalid type is specified");var n=Ke(t);!function(e,r,t,o){var n=Object.create(qr.prototype),a=function(){},i=function(){return d(void 0)},l=function(){return d(void 0)},u=function(){return d(void 0)};void 0!==r.start&&(a=function(){return r.start(n)});void 0!==r.write&&(i=function(e){return r.write(e,n)});void 0!==r.close&&(l=function(){return r.close()});void 0!==r.abort&&(u=function(e){return r.abort(e)});Er(e,n,a,i,l,u,t,o)}(this,o,Je(t,1),n)}return Object.defineProperty(WritableStream.prototype,"locked",{get:function(){if(!sr(this))throw Dr("locked");return cr(this)},enumerable:!1,configurable:!0}),WritableStream.prototype.abort=function(e){return void 0===e&&(e=void 0),sr(this)?cr(this)?f(new TypeError("Cannot abort a stream that already has a writer")):dr(this,e):f(Dr("abort"))},WritableStream.prototype.close=function(){return sr(this)?cr(this)?f(new TypeError("Cannot close a stream that already has a writer")):hr(this)?f(new TypeError("Cannot close an already-closing stream")):fr(this):f(Dr("close"))},WritableStream.prototype.getWriter=function(){if(!sr(this))throw Dr("getWriter");return lr(this)},WritableStream}();function lr(e){return new vr(e)}function ur(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new w,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function sr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof ir)}function cr(e){return void 0!==e._writer}function dr(e,r){var t;if("closed"===e._state||"errored"===e._state)return d(void 0);e._writableStreamController._abortReason=r,null===(t=e._writableStreamController._abortController)||void 0===t||t.abort();var o=e._state;if("closed"===o||"errored"===o)return d(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;var n=!1;"erroring"===o&&(n=!0,r=void 0);var a=c((function(t,o){e._pendingAbortRequest={_promise:void 0,_resolve:t,_reject:o,_reason:r,_wasAlreadyErroring:n}}));return e._pendingAbortRequest._promise=a,n||pr(e,r),a}function fr(e){var r=e._state;if("closed"===r||"errored"===r)return f(new TypeError("The stream (in "+r+" state) is not in the writable state and cannot be closed"));var t,o=c((function(r,t){var o={_resolve:r,_reject:t};e._closeRequest=o})),n=e._writer;return void 0!==n&&e._backpressure&&"writable"===r&&Gr(n),be(t=e._writableStreamController,Pr,0),Br(t),o}function br(e,r){"writable"!==e._state?_r(e):pr(e,r)}function pr(e,r){var t=e._writableStreamController;e._state="erroring",e._storedError=r;var o=e._writer;void 0!==o&&Rr(o,r),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&t._started&&_r(e)}function _r(e){e._state="errored",e._writableStreamController[B]();var r=e._storedError;if(e._writeRequests.forEach((function(e){e._reject(r)})),e._writeRequests=new w,void 0!==e._pendingAbortRequest){var t=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,t._wasAlreadyErroring)return t._reject(r),void mr(e);p(e._writableStreamController[j](t._reason),(function(){t._resolve(),mr(e)}),(function(r){t._reject(r),mr(e)}))}else mr(e)}function hr(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function mr(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);var r=e._writer;void 0!==r&&Yr(r,e._storedError)}function yr(e,r){var t=e._writer;void 0!==t&&r!==e._backpressure&&(r?function(e){Nr(e)}(t):Gr(t)),e._backpressure=r}Object.defineProperties(ir.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(ir.prototype,r.toStringTag,{value:"WritableStream",configurable:!0});var vr=function(){function WritableStreamDefaultWriter(e){if(M(e,1,"WritableStreamDefaultWriter"),nr(e,"First parameter"),cr(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;var r,t=e._state;if("writable"===t)!hr(e)&&e._backpressure?Nr(this):Vr(this),Mr(this);else if("erroring"===t)Hr(this,e._storedError),Mr(this);else if("closed"===t)Vr(this),Mr(r=this),xr(r);else{var o=e._storedError;Hr(this,o),Qr(this,o)}}return Object.defineProperty(WritableStreamDefaultWriter.prototype,"closed",{get:function(){return gr(this)?this._closedPromise:f(Fr("closed"))},enumerable:!1,configurable:!0}),Object.defineProperty(WritableStreamDefaultWriter.prototype,"desiredSize",{get:function(){if(!gr(this))throw Fr("desiredSize");if(void 0===this._ownerWritableStream)throw Lr("desiredSize");return function(e){var r=e._ownerWritableStream,t=r._state;if("errored"===t||"erroring"===t)return null;if("closed"===t)return 0;return jr(r._writableStreamController)}(this)},enumerable:!1,configurable:!0}),Object.defineProperty(WritableStreamDefaultWriter.prototype,"ready",{get:function(){return gr(this)?this._readyPromise:f(Fr("ready"))},enumerable:!1,configurable:!0}),WritableStreamDefaultWriter.prototype.abort=function(e){return void 0===e&&(e=void 0),gr(this)?void 0===this._ownerWritableStream?f(Lr("abort")):function(e,r){return dr(e._ownerWritableStream,r)}(this,e):f(Fr("abort"))},WritableStreamDefaultWriter.prototype.close=function(){if(!gr(this))return f(Fr("close"));var e=this._ownerWritableStream;return void 0===e?f(Lr("close")):hr(e)?f(new TypeError("Cannot close an already-closing stream")):Sr(this)},WritableStreamDefaultWriter.prototype.releaseLock=function(){if(!gr(this))throw Fr("releaseLock");void 0!==this._ownerWritableStream&&Tr(this)},WritableStreamDefaultWriter.prototype.write=function(e){return void 0===e&&(e=void 0),gr(this)?void 0===this._ownerWritableStream?f(Lr("write to")):Cr(this,e):f(Fr("write"))},WritableStreamDefaultWriter}();function gr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof vr)}function Sr(e){return fr(e._ownerWritableStream)}function wr(e,r){"pending"===e._closedPromiseState?Yr(e,r):function(e,r){Qr(e,r)}(e,r)}function Rr(e,r){"pending"===e._readyPromiseState?Ur(e,r):function(e,r){Hr(e,r)}(e,r)}function Tr(e){var r=e._ownerWritableStream,t=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");Rr(e,t),wr(e,t),r._writer=void 0,e._ownerWritableStream=void 0}function Cr(e,r){var t=e._ownerWritableStream,o=t._writableStreamController,n=function(e,r){try{return e._strategySizeAlgorithm(r)}catch(r){return kr(e,r),1}}(o,r);if(t!==e._ownerWritableStream)return f(Lr("write to"));var a=t._state;if("errored"===a)return f(t._storedError);if(hr(t)||"closed"===a)return f(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return f(t._storedError);var i=function(e){return c((function(r,t){var o={_resolve:r,_reject:t};e._writeRequests.push(o)}))}(t);return function(e,r,t){try{be(e,r,t)}catch(r){return void kr(e,r)}var o=e._controlledWritableStream;if(!hr(o)&&"writable"===o._state){yr(o,Ar(e))}Br(e)}(o,r,n),i}Object.defineProperties(vr.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(vr.prototype,r.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});var Pr={},qr=function(){function WritableStreamDefaultController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(WritableStreamDefaultController.prototype,"abortReason",{get:function(){if(!Or(this))throw Ir("abortReason");return this._abortReason},enumerable:!1,configurable:!0}),Object.defineProperty(WritableStreamDefaultController.prototype,"signal",{get:function(){if(!Or(this))throw Ir("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal},enumerable:!1,configurable:!0}),WritableStreamDefaultController.prototype.error=function(e){if(void 0===e&&(e=void 0),!Or(this))throw Ir("error");"writable"===this._controlledWritableStream._state&&zr(this,e)},WritableStreamDefaultController.prototype[j]=function(e){var r=this._abortAlgorithm(e);return Wr(this),r},WritableStreamDefaultController.prototype[B]=function(){pe(this)},WritableStreamDefaultController}();function Or(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof qr)}function Er(e,r,t,o,n,a,i,l){r._controlledWritableStream=e,e._writableStreamController=r,r._queue=void 0,r._queueTotalSize=void 0,pe(r),r._abortReason=void 0,r._abortController=function(){if(ar)return new AbortController}(),r._started=!1,r._strategySizeAlgorithm=l,r._strategyHWM=i,r._writeAlgorithm=o,r._closeAlgorithm=n,r._abortAlgorithm=a;var u=Ar(r);yr(e,u),p(d(t()),(function(){r._started=!0,Br(r)}),(function(t){r._started=!0,br(e,t)}))}function Wr(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function jr(e){return e._strategyHWM-e._queueTotalSize}function Br(e){var r=e._controlledWritableStream;if(e._started&&void 0===r._inFlightWriteRequest)if("erroring"!==r._state){if(0!==e._queue.length){var t=e._queue.peek().value;t===Pr?function(e){var r=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(r),fe(e);var t=e._closeAlgorithm();Wr(e),p(t,(function(){!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";var r=e._writer;void 0!==r&&xr(r)}(r)}),(function(e){!function(e,r){e._inFlightCloseRequest._reject(r),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(r),e._pendingAbortRequest=void 0),br(e,r)}(r,e)}))}(e):function(e,r){var t=e._controlledWritableStream;(function(e){e._inFlightWriteRequest=e._writeRequests.shift()})(t),p(e._writeAlgorithm(r),(function(){!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(t);var r=t._state;if(fe(e),!hr(t)&&"writable"===r){var o=Ar(e);yr(t,o)}Br(e)}),(function(r){"writable"===t._state&&Wr(e),function(e,r){e._inFlightWriteRequest._reject(r),e._inFlightWriteRequest=void 0,br(e,r)}(t,r)}))}(e,t)}}else _r(r)}function kr(e,r){"writable"===e._controlledWritableStream._state&&zr(e,r)}function Ar(e){return jr(e)<=0}function zr(e,r){var t=e._controlledWritableStream;Wr(e),pr(t,r)}function Dr(e){return new TypeError("WritableStream.prototype."+e+" can only be used on a WritableStream")}function Ir(e){return new TypeError("WritableStreamDefaultController.prototype."+e+" can only be used on a WritableStreamDefaultController")}function Fr(e){return new TypeError("WritableStreamDefaultWriter.prototype."+e+" can only be used on a WritableStreamDefaultWriter")}function Lr(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function Mr(e){e._closedPromise=c((function(r,t){e._closedPromise_resolve=r,e._closedPromise_reject=t,e._closedPromiseState="pending"}))}function Qr(e,r){Mr(e),Yr(e,r)}function Yr(e,r){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(r),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function xr(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Nr(e){e._readyPromise=c((function(r,t){e._readyPromise_resolve=r,e._readyPromise_reject=t})),e._readyPromiseState="pending"}function Hr(e,r){Nr(e),Ur(e,r)}function Vr(e){Nr(e),Gr(e)}function Ur(e,r){void 0!==e._readyPromise_reject&&(y(e._readyPromise),e._readyPromise_reject(r),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function Gr(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(qr.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(qr.prototype,r.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});var Xr="undefined"!=typeof DOMException?DOMException:void 0;var Jr,Kr=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Xr)?Xr:((Jr=function(e,r){this.message=e||"",this.name=r||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}).prototype=Object.create(Error.prototype),Object.defineProperty(Jr.prototype,"constructor",{value:Jr,writable:!0,configurable:!0}),Jr);function Zr(e,r,o,n,a,i){var l=V(e),u=lr(r);e._disturbed=!0;var s=!1,m=d(void 0);return c((function(v,g){var S,w,R,T;if(void 0!==i){if(S=function(){var t=new Kr("Aborted","AbortError"),o=[];n||o.push((function(){return"writable"===r._state?dr(r,t):d(void 0)})),a||o.push((function(){return"readable"===e._state?Tt(e,t):d(void 0)})),E((function(){return Promise.all(o.map((function(e){return e()})))}),!0,t)},i.aborted)return void S();i.addEventListener("abort",S)}if(O(e,l._closedPromise,(function(e){n?W(!0,e):E((function(){return dr(r,e)}),!0,e)})),O(r,u._closedPromise,(function(r){a?W(!0,r):E((function(){return Tt(e,r)}),!0,r)})),w=e,R=l._closedPromise,T=function(){o?W():E((function(){return function(e){var r=e._ownerWritableStream,t=r._state;return hr(r)||"closed"===t?d(void 0):"errored"===t?f(r._storedError):Sr(e)}(u)}))},"closed"===w._state?T():_(R,T),hr(r)||"closed"===r._state){var P=new TypeError("the destination writable stream closed before all data could be piped to it");a?W(!0,P):E((function(){return Tt(e,P)}),!0,P)}function q(){var e=m;return b(m,(function(){return e!==m?q():void 0}))}function O(e,r,t){"errored"===e._state?t(e._storedError):h(r,t)}function E(e,t,o){function n(){p(e(),(function(){return j(t,o)}),(function(e){return j(!0,e)}))}s||(s=!0,"writable"!==r._state||hr(r)?n():_(q(),n))}function W(e,t){s||(s=!0,"writable"!==r._state||hr(r)?j(e,t):_(q(),(function(){return j(e,t)})))}function j(e,r){Tr(u),C(l),void 0!==i&&i.removeEventListener("abort",S),e?g(r):v(void 0)}y(c((function(e,r){!function o(n){n?e():b(s?d(!0):b(u._readyPromise,(function(){return c((function(e,r){re(l,{_chunkSteps:function(r){m=b(Cr(u,r),void 0,t),e(!1)},_closeSteps:function(){return e(!0)},_errorSteps:r})}))})),o,r)}(!1)})))}))}var $r=function(){function ReadableStreamDefaultController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(ReadableStreamDefaultController.prototype,"desiredSize",{get:function(){if(!et(this))throw ct("desiredSize");return lt(this)},enumerable:!1,configurable:!0}),ReadableStreamDefaultController.prototype.close=function(){if(!et(this))throw ct("close");if(!ut(this))throw new TypeError("The stream is not in a state that permits close");nt(this)},ReadableStreamDefaultController.prototype.enqueue=function(e){if(void 0===e&&(e=void 0),!et(this))throw ct("enqueue");if(!ut(this))throw new TypeError("The stream is not in a state that permits enqueue");return at(this,e)},ReadableStreamDefaultController.prototype.error=function(e){if(void 0===e&&(e=void 0),!et(this))throw ct("error");it(this,e)},ReadableStreamDefaultController.prototype[k]=function(e){pe(this);var r=this._cancelAlgorithm(e);return ot(this),r},ReadableStreamDefaultController.prototype[A]=function(e){var r=this._controlledReadableStream;if(this._queue.length>0){var t=fe(this);this._closeRequested&&0===this._queue.length?(ot(this),Ct(r)):rt(this),e._chunkSteps(t)}else U(r,e),rt(this)},ReadableStreamDefaultController}();function et(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof $r)}function rt(e){tt(e)&&(e._pulling?e._pullAgain=!0:(e._pulling=!0,p(e._pullAlgorithm(),(function(){e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,rt(e))}),(function(r){it(e,r)}))))}function tt(e){var r=e._controlledReadableStream;return!!ut(e)&&(!!e._started&&(!!(Rt(r)&&X(r)>0)||lt(e)>0))}function ot(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function nt(e){if(ut(e)){var r=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(ot(e),Ct(r))}}function at(e,r){if(ut(e)){var t=e._controlledReadableStream;if(Rt(t)&&X(t)>0)G(t,r,!1);else{var o=void 0;try{o=e._strategySizeAlgorithm(r)}catch(r){throw it(e,r),r}try{be(e,r,o)}catch(r){throw it(e,r),r}}rt(e)}}function it(e,r){var t=e._controlledReadableStream;"readable"===t._state&&(pe(e),ot(e),Pt(t,r))}function lt(e){var r=e._controlledReadableStream._state;return"errored"===r?null:"closed"===r?0:e._strategyHWM-e._queueTotalSize}function ut(e){var r=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===r}function st(e,r,t,o,n,a,i){r._controlledReadableStream=e,r._queue=void 0,r._queueTotalSize=void 0,pe(r),r._started=!1,r._closeRequested=!1,r._pullAgain=!1,r._pulling=!1,r._strategySizeAlgorithm=i,r._strategyHWM=a,r._pullAlgorithm=o,r._cancelAlgorithm=n,e._readableStreamController=r,p(d(t()),(function(){r._started=!0,rt(r)}),(function(e){it(r,e)}))}function ct(e){return new TypeError("ReadableStreamDefaultController.prototype."+e+" can only be used on a ReadableStreamDefaultController")}function dt(e,r){return me(e._readableStreamController)?function(e){var r,t,o,n,a,i=V(e),l=!1,u=!1,s=!1,f=!1,b=!1,p=c((function(e){a=e}));function _(e){h(e._closedPromise,(function(r){e===i&&(Ae(o._readableStreamController,r),Ae(n._readableStreamController,r),f&&b||a(void 0))}))}function m(){Ue(i)&&(C(i),_(i=V(e))),re(i,{_chunkSteps:function(r){v((function(){u=!1,s=!1;var t=r,i=r;if(!f&&!b)try{i=de(r)}catch(r){return Ae(o._readableStreamController,r),Ae(n._readableStreamController,r),void a(Tt(e,r))}f||ke(o._readableStreamController,t),b||ke(n._readableStreamController,i),l=!1,u?g():s&&S()}))},_closeSteps:function(){l=!1,f||Be(o._readableStreamController),b||Be(n._readableStreamController),o._readableStreamController._pendingPullIntos.length>0&&Ie(o._readableStreamController,0),n._readableStreamController._pendingPullIntos.length>0&&Ie(n._readableStreamController,0),f&&b||a(void 0)},_errorSteps:function(){l=!1}})}function y(r,t){ee(i)&&(C(i),_(i=Ye(e)));var c=t?n:o,d=t?o:n;Ge(i,r,{_chunkSteps:function(r){v((function(){u=!1,s=!1;var o=t?b:f;if(t?f:b)o||Fe(c._readableStreamController,r);else{var n=void 0;try{n=de(r)}catch(r){return Ae(c._readableStreamController,r),Ae(d._readableStreamController,r),void a(Tt(e,r))}o||Fe(c._readableStreamController,r),ke(d._readableStreamController,n)}l=!1,u?g():s&&S()}))},_closeSteps:function(e){l=!1;var r=t?b:f,o=t?f:b;r||Be(c._readableStreamController),o||Be(d._readableStreamController),void 0!==e&&(r||Fe(c._readableStreamController,e),!o&&d._readableStreamController._pendingPullIntos.length>0&&Ie(d._readableStreamController,0)),r&&o||a(void 0)},_errorSteps:function(){l=!1}})}function g(){if(l)return u=!0,d(void 0);l=!0;var e=ze(o._readableStreamController);return null===e?m():y(e._view,!1),d(void 0)}function S(){if(l)return s=!0,d(void 0);l=!0;var e=ze(n._readableStreamController);return null===e?m():y(e._view,!0),d(void 0)}function w(o){if(f=!0,r=o,b){var n=ue([r,t]),i=Tt(e,n);a(i)}return p}function R(o){if(b=!0,t=o,f){var n=ue([r,t]),i=Tt(e,n);a(i)}return p}function T(){}return o=gt(T,g,w),n=gt(T,S,R),_(i),[o,n]}(e):function(e,r){var t,o,n,a,i,l=V(e),u=!1,s=!1,f=!1,b=!1,p=c((function(e){i=e}));function _(){return u?(s=!0,d(void 0)):(u=!0,re(l,{_chunkSteps:function(e){v((function(){s=!1;var r=e,t=e;f||at(n._readableStreamController,r),b||at(a._readableStreamController,t),u=!1,s&&_()}))},_closeSteps:function(){u=!1,f||nt(n._readableStreamController),b||nt(a._readableStreamController),f&&b||i(void 0)},_errorSteps:function(){u=!1}}),d(void 0))}function m(r){if(f=!0,t=r,b){var n=ue([t,o]),a=Tt(e,n);i(a)}return p}function y(r){if(b=!0,o=r,f){var n=ue([t,o]),a=Tt(e,n);i(a)}return p}function g(){}return n=vt(g,_,m),a=vt(g,_,y),h(l._closedPromise,(function(e){it(n._readableStreamController,e),it(a._readableStreamController,e),f&&b||i(void 0)})),[n,a]}(e)}function ft(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function bt(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function pt(e,r,t){return F(e,t),function(t){return g(e,r,[t])}}function _t(e,r){if("bytes"!==(e=""+e))throw new TypeError(r+" '"+e+"' is not a valid enumeration value for ReadableStreamType");return e}function ht(e,r){if("byob"!==(e=""+e))throw new TypeError(r+" '"+e+"' is not a valid enumeration value for ReadableStreamReaderMode");return e}function mt(e,r){I(e,r);var t=null==e?void 0:e.preventAbort,o=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,r){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(r+" is not an AbortSignal.")}(a,r+" has member 'signal' that"),{preventAbort:Boolean(t),preventCancel:Boolean(o),preventClose:Boolean(n),signal:a}}Object.defineProperties($r.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty($r.prototype,r.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});var yt=function(){function ReadableStream(e,r){void 0===e&&(e={}),void 0===r&&(r={}),void 0===e?e=null:L(e,"First parameter");var t=Ze(r,"Second parameter"),o=function(e,r){I(e,r);var t=e,o=null==t?void 0:t.autoAllocateChunkSize,n=null==t?void 0:t.cancel,a=null==t?void 0:t.pull,i=null==t?void 0:t.start,l=null==t?void 0:t.type;return{autoAllocateChunkSize:void 0===o?void 0:N(o,r+" has member 'autoAllocateChunkSize' that"),cancel:void 0===n?void 0:ft(n,t,r+" has member 'cancel' that"),pull:void 0===a?void 0:bt(a,t,r+" has member 'pull' that"),start:void 0===i?void 0:pt(i,t,r+" has member 'start' that"),type:void 0===l?void 0:_t(l,r+" has member 'type' that")}}(e,"First parameter");if(St(this),"bytes"===o.type){if(void 0!==t.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,r,t){var o=Object.create(he.prototype),n=function(){},a=function(){return d(void 0)},i=function(){return d(void 0)};void 0!==r.start&&(n=function(){return r.start(o)}),void 0!==r.pull&&(a=function(){return r.pull(o)}),void 0!==r.cancel&&(i=function(e){return r.cancel(e)});var l=r.autoAllocateChunkSize;if(0===l)throw new TypeError("autoAllocateChunkSize must be greater than 0");Le(e,o,n,a,i,t,l)}(this,o,Je(t,0))}else{var n=Ke(t);!function(e,r,t,o){var n=Object.create($r.prototype),a=function(){},i=function(){return d(void 0)},l=function(){return d(void 0)};void 0!==r.start&&(a=function(){return r.start(n)}),void 0!==r.pull&&(i=function(){return r.pull(n)}),void 0!==r.cancel&&(l=function(e){return r.cancel(e)}),st(e,n,a,i,l,t,o)}(this,o,Je(t,1),n)}}return Object.defineProperty(ReadableStream.prototype,"locked",{get:function(){if(!wt(this))throw qt("locked");return Rt(this)},enumerable:!1,configurable:!0}),ReadableStream.prototype.cancel=function(e){return void 0===e&&(e=void 0),wt(this)?Rt(this)?f(new TypeError("Cannot cancel a stream that already has a reader")):Tt(this,e):f(qt("cancel"))},ReadableStream.prototype.getReader=function(e){if(void 0===e&&(e=void 0),!wt(this))throw qt("getReader");return void 0===function(e,r){I(e,r);var t=null==e?void 0:e.mode;return{mode:void 0===t?void 0:ht(t,r+" has member 'mode' that")}}(e,"First parameter").mode?V(this):Ye(this)},ReadableStream.prototype.pipeThrough=function(e,r){if(void 0===r&&(r={}),!wt(this))throw qt("pipeThrough");M(e,1,"pipeThrough");var t=function(e,r){I(e,r);var t=null==e?void 0:e.readable;Q(t,"readable","ReadableWritablePair"),H(t,r+" has member 'readable' that");var o=null==e?void 0:e.writable;return Q(o,"writable","ReadableWritablePair"),nr(o,r+" has member 'writable' that"),{readable:t,writable:o}}(e,"First parameter"),o=mt(r,"Second parameter");if(Rt(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(cr(t.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return y(Zr(this,t.writable,o.preventClose,o.preventAbort,o.preventCancel,o.signal)),t.readable},ReadableStream.prototype.pipeTo=function(e,r){if(void 0===r&&(r={}),!wt(this))return f(qt("pipeTo"));if(void 0===e)return f("Parameter 1 is required in 'pipeTo'.");if(!sr(e))return f(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));var t;try{t=mt(r,"Second parameter")}catch(e){return f(e)}return Rt(this)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):cr(e)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Zr(this,e,t.preventClose,t.preventAbort,t.preventCancel,t.signal)},ReadableStream.prototype.tee=function(){if(!wt(this))throw qt("tee");return ue(dt(this))},ReadableStream.prototype.values=function(e){if(void 0===e&&(e=void 0),!wt(this))throw qt("values");var r,t,o,n,a,i=function(e,r){I(e,r);var t=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(t)}}(e,"First parameter");return r=this,t=i.preventCancel,o=V(r),n=new oe(o,t),(a=Object.create(ne))._asyncIteratorImpl=n,a},ReadableStream}();function vt(e,r,t,o,n){void 0===o&&(o=1),void 0===n&&(n=function(){return 1});var a=Object.create(yt.prototype);return St(a),st(a,Object.create($r.prototype),e,r,t,o,n),a}function gt(e,r,t){var o=Object.create(yt.prototype);return St(o),Le(o,Object.create(he.prototype),e,r,t,0,void 0),o}function St(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function wt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof yt)}function Rt(e){return void 0!==e._reader}function Tt(e,r){if(e._disturbed=!0,"closed"===e._state)return d(void 0);if("errored"===e._state)return f(e._storedError);Ct(e);var o=e._reader;return void 0!==o&&Ue(o)&&(o._readIntoRequests.forEach((function(e){e._closeSteps(void 0)})),o._readIntoRequests=new w),m(e._readableStreamController[k](r),t)}function Ct(e){e._state="closed";var r=e._reader;void 0!==r&&(W(r),ee(r)&&(r._readRequests.forEach((function(e){e._closeSteps()})),r._readRequests=new w))}function Pt(e,r){e._state="errored",e._storedError=r;var t=e._reader;void 0!==t&&(E(t,r),ee(t)?(t._readRequests.forEach((function(e){e._errorSteps(r)})),t._readRequests=new w):(t._readIntoRequests.forEach((function(e){e._errorSteps(r)})),t._readIntoRequests=new w))}function qt(e){return new TypeError("ReadableStream.prototype."+e+" can only be used on a ReadableStream")}function Ot(e,r){I(e,r);var t=null==e?void 0:e.highWaterMark;return Q(t,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Y(t)}}Object.defineProperties(yt.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(yt.prototype,r.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof r.asyncIterator&&Object.defineProperty(yt.prototype,r.asyncIterator,{value:yt.prototype.values,writable:!0,configurable:!0});var Et=function(e){return e.byteLength};Object.defineProperty(Et,"name",{value:"size",configurable:!0});var Wt=function(){function ByteLengthQueuingStrategy(e){M(e,1,"ByteLengthQueuingStrategy"),e=Ot(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}return Object.defineProperty(ByteLengthQueuingStrategy.prototype,"highWaterMark",{get:function(){if(!Bt(this))throw jt("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark},enumerable:!1,configurable:!0}),Object.defineProperty(ByteLengthQueuingStrategy.prototype,"size",{get:function(){if(!Bt(this))throw jt("size");return Et},enumerable:!1,configurable:!0}),ByteLengthQueuingStrategy}();function jt(e){return new TypeError("ByteLengthQueuingStrategy.prototype."+e+" can only be used on a ByteLengthQueuingStrategy")}function Bt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof Wt)}Object.defineProperties(Wt.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Wt.prototype,r.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});var kt=function(){return 1};Object.defineProperty(kt,"name",{value:"size",configurable:!0});var At=function(){function CountQueuingStrategy(e){M(e,1,"CountQueuingStrategy"),e=Ot(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}return Object.defineProperty(CountQueuingStrategy.prototype,"highWaterMark",{get:function(){if(!Dt(this))throw zt("highWaterMark");return this._countQueuingStrategyHighWaterMark},enumerable:!1,configurable:!0}),Object.defineProperty(CountQueuingStrategy.prototype,"size",{get:function(){if(!Dt(this))throw zt("size");return kt},enumerable:!1,configurable:!0}),CountQueuingStrategy}();function zt(e){return new TypeError("CountQueuingStrategy.prototype."+e+" can only be used on a CountQueuingStrategy")}function Dt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof At)}function It(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function Ft(e,r,t){return F(e,t),function(t){return g(e,r,[t])}}function Lt(e,r,t){return F(e,t),function(t,o){return S(e,r,[t,o])}}Object.defineProperties(At.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(At.prototype,r.toStringTag,{value:"CountQueuingStrategy",configurable:!0});var Mt=function(){function TransformStream(e,r,t){void 0===e&&(e={}),void 0===r&&(r={}),void 0===t&&(t={}),void 0===e&&(e=null);var o=Ze(r,"Second parameter"),n=Ze(t,"Third parameter"),a=function(e,r){I(e,r);var t=null==e?void 0:e.flush,o=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===t?void 0:It(t,e,r+" has member 'flush' that"),readableType:o,start:void 0===n?void 0:Ft(n,e,r+" has member 'start' that"),transform:void 0===a?void 0:Lt(a,e,r+" has member 'transform' that"),writableType:i}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");var i,l=Je(n,0),u=Ke(n),s=Je(o,1),b=Ke(o);!function(e,r,t,o,n,a){function i(){return r}function l(r){return function(e,r){var t=e._transformStreamController;if(e._backpressure){return m(e._backpressureChangePromise,(function(){var o=e._writable;if("erroring"===o._state)throw o._storedError;return Xt(t,r)}))}return Xt(t,r)}(e,r)}function u(r){return function(e,r){return Yt(e,r),d(void 0)}(e,r)}function s(){return function(e){var r=e._readable,t=e._transformStreamController,o=t._flushAlgorithm();return Ut(t),m(o,(function(){if("errored"===r._state)throw r._storedError;nt(r._readableStreamController)}),(function(t){throw Yt(e,t),r._storedError}))}(e)}function c(){return function(e){return Nt(e,!1),e._backpressureChangePromise}(e)}function f(r){return xt(e,r),d(void 0)}e._writable=function(e,r,t,o,n,a){void 0===n&&(n=1),void 0===a&&(a=function(){return 1});var i=Object.create(ir.prototype);return ur(i),Er(i,Object.create(qr.prototype),e,r,t,o,n,a),i}(i,l,s,u,t,o),e._readable=vt(i,c,f,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Nt(e,!0),e._transformStreamController=void 0}(this,c((function(e){i=e})),s,b,l,u),function(e,r){var t=Object.create(Ht.prototype),o=function(e){try{return Gt(t,e),d(void 0)}catch(e){return f(e)}},n=function(){return d(void 0)};void 0!==r.transform&&(o=function(e){return r.transform(e,t)});void 0!==r.flush&&(n=function(){return r.flush(t)});!function(e,r,t,o){r._controlledTransformStream=e,e._transformStreamController=r,r._transformAlgorithm=t,r._flushAlgorithm=o}(e,t,o,n)}(this,a),void 0!==a.start?i(a.start(this._transformStreamController)):i(void 0)}return Object.defineProperty(TransformStream.prototype,"readable",{get:function(){if(!Qt(this))throw Kt("readable");return this._readable},enumerable:!1,configurable:!0}),Object.defineProperty(TransformStream.prototype,"writable",{get:function(){if(!Qt(this))throw Kt("writable");return this._writable},enumerable:!1,configurable:!0}),TransformStream}();function Qt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof Mt)}function Yt(e,r){it(e._readable._readableStreamController,r),xt(e,r)}function xt(e,r){Ut(e._transformStreamController),kr(e._writable._writableStreamController,r),e._backpressure&&Nt(e,!1)}function Nt(e,r){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=c((function(r){e._backpressureChangePromise_resolve=r})),e._backpressure=r}Object.defineProperties(Mt.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Mt.prototype,r.toStringTag,{value:"TransformStream",configurable:!0});var Ht=function(){function TransformStreamDefaultController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(TransformStreamDefaultController.prototype,"desiredSize",{get:function(){if(!Vt(this))throw Jt("desiredSize");return lt(this._controlledTransformStream._readable._readableStreamController)},enumerable:!1,configurable:!0}),TransformStreamDefaultController.prototype.enqueue=function(e){if(void 0===e&&(e=void 0),!Vt(this))throw Jt("enqueue");Gt(this,e)},TransformStreamDefaultController.prototype.error=function(e){if(void 0===e&&(e=void 0),!Vt(this))throw Jt("error");var r;r=e,Yt(this._controlledTransformStream,r)},TransformStreamDefaultController.prototype.terminate=function(){if(!Vt(this))throw Jt("terminate");!function(e){var r=e._controlledTransformStream;nt(r._readable._readableStreamController);var t=new TypeError("TransformStream terminated");xt(r,t)}(this)},TransformStreamDefaultController}();function Vt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof Ht)}function Ut(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function Gt(e,r){var t=e._controlledTransformStream,o=t._readable._readableStreamController;if(!ut(o))throw new TypeError("Readable side is not in a state that permits enqueue");try{at(o,r)}catch(e){throw xt(t,e),t._readable._storedError}(function(e){return!tt(e)})(o)!==t._backpressure&&Nt(t,!0)}function Xt(e,r){return m(e._transformAlgorithm(r),void 0,(function(r){throw Yt(e._controlledTransformStream,r),r}))}function Jt(e){return new TypeError("TransformStreamDefaultController.prototype."+e+" can only be used on a TransformStreamDefaultController")}function Kt(e){return new TypeError("TransformStream.prototype."+e+" can only be used on a TransformStream")}Object.defineProperties(Ht.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Ht.prototype,r.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});var Zt={ReadableStream:yt,ReadableStreamDefaultController:$r,ReadableByteStreamController:he,ReadableStreamBYOBRequest:_e,ReadableStreamDefaultReader:$,ReadableStreamBYOBReader:Ve,WritableStream:ir,WritableStreamDefaultController:qr,WritableStreamDefaultWriter:vr,ByteLengthQueuingStrategy:Wt,CountQueuingStrategy:At,TransformStream:Mt,TransformStreamDefaultController:Ht};if(void 0!==o)for(var $t in Zt)Object.prototype.hasOwnProperty.call(Zt,$t)&&Object.defineProperty(o,$t,{value:Zt[$t],writable:!0,configurable:!0});e.ByteLengthQueuingStrategy=Wt,e.CountQueuingStrategy=At,e.ReadableByteStreamController=he,e.ReadableStream=yt,e.ReadableStreamBYOBReader=Ve,e.ReadableStreamBYOBRequest=_e,e.ReadableStreamDefaultController=$r,e.ReadableStreamDefaultReader=$,e.TransformStream=Mt,e.TransformStreamDefaultController=Ht,e.WritableStream=ir,e.WritableStreamDefaultController=qr,e.WritableStreamDefaultWriter=vr,Object.defineProperty(e,"__esModule",{value:!0})})); +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).WebStreamsPolyfill={})}(this,(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:function(e){return"Symbol("+e+")"};function t(){}var o="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function n(e){return"object"==typeof e&&null!==e||"function"==typeof e}var a=t,i=Promise,l=Promise.prototype.then,u=Promise.resolve.bind(i),s=Promise.reject.bind(i);function c(e){return new i(e)}function d(e){return u(e)}function f(e){return s(e)}function b(e,r,t){return l.call(e,r,t)}function p(e,r,t){b(b(e,r,t),void 0,a)}function _(e,r){p(e,r)}function h(e,r){p(e,void 0,r)}function m(e,r,t){return b(e,r,t)}function y(e){b(e,void 0,a)}var v=function(){var e=o&&o.queueMicrotask;if("function"==typeof e)return e;var r=d(void 0);return function(e){return b(r,e)}}();function g(e,r,t){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,r,t)}function S(e,r,t){try{return d(g(e,r,t))}catch(e){return f(e)}}var w=function(){function e(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}return Object.defineProperty(e.prototype,"length",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.push=function(e){var r=this._back,t=r;16383===r._elements.length&&(t={_elements:[],_next:void 0}),r._elements.push(e),t!==r&&(this._back=t,r._next=t),++this._size},e.prototype.shift=function(){var e=this._front,r=e,t=this._cursor,o=t+1,n=e._elements,a=n[t];return 16384===o&&(r=e._next,o=0),--this._size,this._cursor=o,e!==r&&(this._front=r),n[t]=void 0,a},e.prototype.forEach=function(e){for(var r=this._cursor,t=this._front,o=t._elements;!(r===o.length&&void 0===t._next||r===o.length&&(r=0,0===(o=(t=t._next)._elements).length));)e(o[r]),++r},e.prototype.peek=function(){var e=this._front,r=this._cursor;return e._elements[r]},e}();function R(e,r){e._ownerReadableStream=r,r._reader=e,"readable"===r._state?q(e):"closed"===r._state?function(e){q(e),W(e)}(e):O(e,r._storedError)}function T(e,r){return Tt(e._ownerReadableStream,r)}function C(e){"readable"===e._ownerReadableStream._state?E(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,r){O(e,r)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function P(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function q(e){e._closedPromise=c((function(r,t){e._closedPromise_resolve=r,e._closedPromise_reject=t}))}function O(e,r){q(e),E(e,r)}function E(e,r){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(r),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function W(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}var j=r("[[AbortSteps]]"),B=r("[[ErrorSteps]]"),k=r("[[CancelSteps]]"),A=r("[[PullSteps]]"),z=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},D=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function I(e,r){if(void 0!==e&&("object"!=typeof(t=e)&&"function"!=typeof t))throw new TypeError(r+" is not an object.");var t}function F(e,r){if("function"!=typeof e)throw new TypeError(r+" is not a function.")}function L(e,r){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(r+" is not an object.")}function M(e,r,t){if(void 0===e)throw new TypeError("Parameter "+r+" is required in '"+t+"'.")}function Q(e,r,t){if(void 0===e)throw new TypeError(r+" is required in '"+t+"'.")}function Y(e){return Number(e)}function x(e){return 0===e?0:e}function N(e,r){var t=Number.MAX_SAFE_INTEGER,o=Number(e);if(o=x(o),!z(o))throw new TypeError(r+" is not a finite number");if((o=function(e){return x(D(e))}(o))<0||o>t)throw new TypeError(r+" is outside the accepted range of 0 to "+t+", inclusive");return z(o)&&0!==o?o:0}function H(e,r){if(!wt(e))throw new TypeError(r+" is not a ReadableStream.")}function V(e){return new $(e)}function U(e,r){e._reader._readRequests.push(r)}function G(e,r,t){var o=e._reader._readRequests.shift();t?o._closeSteps():o._chunkSteps(r)}function X(e){return e._reader._readRequests.length}function J(e){var r=e._reader;return void 0!==r&&!!ee(r)}var K,Z,$=function(){function ReadableStreamDefaultReader(e){if(M(e,1,"ReadableStreamDefaultReader"),H(e,"First parameter"),Rt(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");R(this,e),this._readRequests=new w}return Object.defineProperty(ReadableStreamDefaultReader.prototype,"closed",{get:function(){return ee(this)?this._closedPromise:f(te("closed"))},enumerable:!1,configurable:!0}),ReadableStreamDefaultReader.prototype.cancel=function(e){return void 0===e&&(e=void 0),ee(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(te("cancel"))},ReadableStreamDefaultReader.prototype.read=function(){if(!ee(this))return f(te("read"));if(void 0===this._ownerReadableStream)return f(P("read from"));var e,r,t=c((function(t,o){e=t,r=o}));return re(this,{_chunkSteps:function(r){return e({value:r,done:!1})},_closeSteps:function(){return e({value:void 0,done:!0})},_errorSteps:function(e){return r(e)}}),t},ReadableStreamDefaultReader.prototype.releaseLock=function(){if(!ee(this))throw te("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}},ReadableStreamDefaultReader}();function ee(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readRequests")&&e instanceof $)}function re(e,r){var t=e._ownerReadableStream;t._disturbed=!0,"closed"===t._state?r._closeSteps():"errored"===t._state?r._errorSteps(t._storedError):t._readableStreamController[A](r)}function te(e){return new TypeError("ReadableStreamDefaultReader.prototype."+e+" can only be used on a ReadableStreamDefaultReader")}Object.defineProperties($.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty($.prototype,r.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0}),"symbol"==typeof r.asyncIterator&&((K={})[r.asyncIterator]=function(){return this},Z=K,Object.defineProperty(Z,r.asyncIterator,{enumerable:!1}));var oe=function(){function e(e,r){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=r}return e.prototype.next=function(){var e=this,r=function(){return e._nextSteps()};return this._ongoingPromise=this._ongoingPromise?m(this._ongoingPromise,r,r):r(),this._ongoingPromise},e.prototype.return=function(e){var r=this,t=function(){return r._returnSteps(e)};return this._ongoingPromise?m(this._ongoingPromise,t,t):t()},e.prototype._nextSteps=function(){var e=this;if(this._isFinished)return Promise.resolve({value:void 0,done:!0});var r,t,o=this._reader;if(void 0===o._ownerReadableStream)return f(P("iterate"));var n=c((function(e,o){r=e,t=o}));return re(o,{_chunkSteps:function(t){e._ongoingPromise=void 0,v((function(){return r({value:t,done:!1})}))},_closeSteps:function(){e._ongoingPromise=void 0,e._isFinished=!0,C(o),r({value:void 0,done:!0})},_errorSteps:function(r){e._ongoingPromise=void 0,e._isFinished=!0,C(o),t(r)}}),n},e.prototype._returnSteps=function(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;var r=this._reader;if(void 0===r._ownerReadableStream)return f(P("finish iterating"));if(!this._preventCancel){var t=T(r,e);return C(r),m(t,(function(){return{value:e,done:!0}}))}return C(r),d({value:e,done:!0})},e}(),ne={next:function(){return ae(this)?this._asyncIteratorImpl.next():f(ie("next"))},return:function(e){return ae(this)?this._asyncIteratorImpl.return(e):f(ie("return"))}};function ae(e){if(!n(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl"))return!1;try{return e._asyncIteratorImpl instanceof oe}catch(e){return!1}}function ie(e){return new TypeError("ReadableStreamAsyncIterator."+e+" can only be used on a ReadableSteamAsyncIterator")}void 0!==Z&&Object.setPrototypeOf(ne,Z);var le=Number.isNaN||function(e){return e!=e};function ue(e){return e.slice()}function se(e,r,t,o,n){new Uint8Array(e).set(new Uint8Array(t,o,n),r)}function ce(e,r,t){if(e.slice)return e.slice(r,t);var o=t-r,n=new ArrayBuffer(o);return se(n,0,e,r,o),n}function de(e){var r=ce(e.buffer,e.byteOffset,e.byteOffset+e.byteLength);return new Uint8Array(r)}function fe(e){var r=e._queue.shift();return e._queueTotalSize-=r.size,e._queueTotalSize<0&&(e._queueTotalSize=0),r.value}function be(e,r,t){if("number"!=typeof(o=t)||le(o)||o<0||t===1/0)throw new RangeError("Size must be a finite, non-NaN, non-negative number.");var o;e._queue.push({value:r,size:t}),e._queueTotalSize+=t}function pe(e){e._queue=new w,e._queueTotalSize=0}var _e=function(){function ReadableStreamBYOBRequest(){throw new TypeError("Illegal constructor")}return Object.defineProperty(ReadableStreamBYOBRequest.prototype,"view",{get:function(){if(!ye(this))throw Me("view");return this._view},enumerable:!1,configurable:!0}),ReadableStreamBYOBRequest.prototype.respond=function(e){if(!ye(this))throw Me("respond");if(M(e,1,"respond"),e=N(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,Ie(this._associatedReadableByteStreamController,e)},ReadableStreamBYOBRequest.prototype.respondWithNewView=function(e){if(!ye(this))throw Me("respondWithNewView");if(M(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");e.buffer,Fe(this._associatedReadableByteStreamController,e)},ReadableStreamBYOBRequest}();Object.defineProperties(_e.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(_e.prototype,r.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});var he=function(){function ReadableByteStreamController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(ReadableByteStreamController.prototype,"byobRequest",{get:function(){if(!me(this))throw Qe("byobRequest");return ze(this)},enumerable:!1,configurable:!0}),Object.defineProperty(ReadableByteStreamController.prototype,"desiredSize",{get:function(){if(!me(this))throw Qe("desiredSize");return De(this)},enumerable:!1,configurable:!0}),ReadableByteStreamController.prototype.close=function(){if(!me(this))throw Qe("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");var e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError("The stream (in "+e+" state) is not in the readable state and cannot be closed");Be(this)},ReadableByteStreamController.prototype.enqueue=function(e){if(!me(this))throw Qe("enqueue");if(M(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");var r=this._controlledReadableByteStream._state;if("readable"!==r)throw new TypeError("The stream (in "+r+" state) is not in the readable state and cannot be enqueued to");ke(this,e)},ReadableByteStreamController.prototype.error=function(e){if(void 0===e&&(e=void 0),!me(this))throw Qe("error");Ae(this,e)},ReadableByteStreamController.prototype[k]=function(e){ge(this),pe(this);var r=this._cancelAlgorithm(e);return je(this),r},ReadableByteStreamController.prototype[A]=function(e){var r=this._controlledReadableByteStream;if(this._queueTotalSize>0){var t=this._queue.shift();this._queueTotalSize-=t.byteLength,Pe(this);var o=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);e._chunkSteps(o)}else{var n=this._autoAllocateChunkSize;if(void 0!==n){var a=void 0;try{a=new ArrayBuffer(n)}catch(r){return void e._errorSteps(r)}var i={buffer:a,bufferByteLength:n,byteOffset:0,byteLength:n,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(i)}U(r,e),ve(this)}},ReadableByteStreamController}();function me(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")&&e instanceof he)}function ye(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")&&e instanceof _e)}function ve(e){(function(e){var r=e._controlledReadableByteStream;if("readable"!==r._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(J(r)&&X(r)>0)return!0;if(He(r)&&Ne(r)>0)return!0;if(De(e)>0)return!0;return!1})(e)&&(e._pulling?e._pullAgain=!0:(e._pulling=!0,p(e._pullAlgorithm(),(function(){e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ve(e))}),(function(r){Ae(e,r)}))))}function ge(e){qe(e),e._pendingPullIntos=new w}function Se(e,r){var t=!1;"closed"===e._state&&(t=!0);var o=we(r);"default"===r.readerType?G(e,o,t):function(e,r,t){var o=e._reader._readIntoRequests.shift();t?o._closeSteps(r):o._chunkSteps(r)}(e,o,t)}function we(e){var r=e.bytesFilled,t=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,r/t)}function Re(e,r,t,o){e._queue.push({buffer:r,byteOffset:t,byteLength:o}),e._queueTotalSize+=o}function Te(e,r){var t=r.elementSize,o=r.bytesFilled-r.bytesFilled%t,n=Math.min(e._queueTotalSize,r.byteLength-r.bytesFilled),a=r.bytesFilled+n,i=a-a%t,l=n,u=!1;i>o&&(l=i-r.bytesFilled,u=!0);for(var s=e._queue;l>0;){var c=s.peek(),d=Math.min(l,c.byteLength),f=r.byteOffset+r.bytesFilled;se(r.buffer,f,c.buffer,c.byteOffset,d),c.byteLength===d?s.shift():(c.byteOffset+=d,c.byteLength-=d),e._queueTotalSize-=d,Ce(e,d,r),l-=d}return u}function Ce(e,r,t){t.bytesFilled+=r}function Pe(e){0===e._queueTotalSize&&e._closeRequested?(je(e),Ct(e._controlledReadableByteStream)):ve(e)}function qe(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Oe(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;var r=e._pendingPullIntos.peek();Te(e,r)&&(We(e),Se(e._controlledReadableByteStream,r))}}function Ee(e,r){var t=e._pendingPullIntos.peek();qe(e),"closed"===e._controlledReadableByteStream._state?function(e,r){var t=e._controlledReadableByteStream;if(He(t))for(;Ne(t)>0;)Se(t,We(e))}(e):function(e,r,t){if(Ce(0,r,t),!(t.bytesFilled0){var n=t.byteOffset+t.bytesFilled,a=ce(t.buffer,n-o,n);Re(e,a,0,a.byteLength)}t.bytesFilled-=o,Se(e._controlledReadableByteStream,t),Oe(e)}}(e,r,t),ve(e)}function We(e){return e._pendingPullIntos.shift()}function je(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function Be(e){var r=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===r._state)if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0)if(e._pendingPullIntos.peek().bytesFilled>0){var t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Ae(e,t),t}je(e),Ct(r)}}function ke(e,r){var t=e._controlledReadableByteStream;if(!e._closeRequested&&"readable"===t._state){var o=r.buffer,n=r.byteOffset,a=r.byteLength,i=o;if(e._pendingPullIntos.length>0){var l=e._pendingPullIntos.peek();l.buffer,0,l.buffer=l.buffer}if(qe(e),J(t))if(0===X(t))Re(e,i,n,a);else e._pendingPullIntos.length>0&&We(e),G(t,new Uint8Array(i,n,a),!1);else He(t)?(Re(e,i,n,a),Oe(e)):Re(e,i,n,a);ve(e)}}function Ae(e,r){var t=e._controlledReadableByteStream;"readable"===t._state&&(ge(e),pe(e),je(e),Pt(t,r))}function ze(e){if(null===e._byobRequest&&e._pendingPullIntos.length>0){var r=e._pendingPullIntos.peek(),t=new Uint8Array(r.buffer,r.byteOffset+r.bytesFilled,r.byteLength-r.bytesFilled),o=Object.create(_e.prototype);!function(e,r,t){e._associatedReadableByteStreamController=r,e._view=t}(o,e,t),e._byobRequest=o}return e._byobRequest}function De(e){var r=e._controlledReadableByteStream._state;return"errored"===r?null:"closed"===r?0:e._strategyHWM-e._queueTotalSize}function Ie(e,r){var t=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==r)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream")}else{if(0===r)throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");if(t.bytesFilled+r>t.byteLength)throw new RangeError("bytesWritten out of range")}t.buffer=t.buffer,Ee(e,r)}function Fe(e,r){var t=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==r.byteLength)throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream")}else if(0===r.byteLength)throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");if(t.byteOffset+t.bytesFilled!==r.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(t.bufferByteLength!==r.buffer.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");if(t.bytesFilled+r.byteLength>t.byteLength)throw new RangeError("The region specified by view is larger than byobRequest");var o=r.byteLength;t.buffer=r.buffer,Ee(e,o)}function Le(e,r,t,o,n,a,i){r._controlledReadableByteStream=e,r._pullAgain=!1,r._pulling=!1,r._byobRequest=null,r._queue=r._queueTotalSize=void 0,pe(r),r._closeRequested=!1,r._started=!1,r._strategyHWM=a,r._pullAlgorithm=o,r._cancelAlgorithm=n,r._autoAllocateChunkSize=i,r._pendingPullIntos=new w,e._readableStreamController=r,p(d(t()),(function(){r._started=!0,ve(r)}),(function(e){Ae(r,e)}))}function Me(e){return new TypeError("ReadableStreamBYOBRequest.prototype."+e+" can only be used on a ReadableStreamBYOBRequest")}function Qe(e){return new TypeError("ReadableByteStreamController.prototype."+e+" can only be used on a ReadableByteStreamController")}function Ye(e){return new Ve(e)}function xe(e,r){e._reader._readIntoRequests.push(r)}function Ne(e){return e._reader._readIntoRequests.length}function He(e){var r=e._reader;return void 0!==r&&!!Ue(r)}Object.defineProperties(he.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(he.prototype,r.toStringTag,{value:"ReadableByteStreamController",configurable:!0});var Ve=function(){function ReadableStreamBYOBReader(e){if(M(e,1,"ReadableStreamBYOBReader"),H(e,"First parameter"),Rt(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!me(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");R(this,e),this._readIntoRequests=new w}return Object.defineProperty(ReadableStreamBYOBReader.prototype,"closed",{get:function(){return Ue(this)?this._closedPromise:f(Xe("closed"))},enumerable:!1,configurable:!0}),ReadableStreamBYOBReader.prototype.cancel=function(e){return void 0===e&&(e=void 0),Ue(this)?void 0===this._ownerReadableStream?f(P("cancel")):T(this,e):f(Xe("cancel"))},ReadableStreamBYOBReader.prototype.read=function(e){if(!Ue(this))return f(Xe("read"));if(!ArrayBuffer.isView(e))return f(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return f(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return f(new TypeError("view's buffer must have non-zero byteLength"));if(e.buffer,void 0===this._ownerReadableStream)return f(P("read from"));var r,t,o=c((function(e,o){r=e,t=o}));return Ge(this,e,{_chunkSteps:function(e){return r({value:e,done:!1})},_closeSteps:function(e){return r({value:e,done:!0})},_errorSteps:function(e){return t(e)}}),o},ReadableStreamBYOBReader.prototype.releaseLock=function(){if(!Ue(this))throw Xe("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");C(this)}},ReadableStreamBYOBReader}();function Ue(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")&&e instanceof Ve)}function Ge(e,r,t){var o=e._ownerReadableStream;o._disturbed=!0,"errored"===o._state?t._errorSteps(o._storedError):function(e,r,t){var o=e._controlledReadableByteStream,n=1;r.constructor!==DataView&&(n=r.constructor.BYTES_PER_ELEMENT);var a=r.constructor,i=r.buffer,l={buffer:i,bufferByteLength:i.byteLength,byteOffset:r.byteOffset,byteLength:r.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(l),void xe(o,t);if("closed"!==o._state){if(e._queueTotalSize>0){if(Te(e,l)){var u=we(l);return Pe(e),void t._chunkSteps(u)}if(e._closeRequested){var s=new TypeError("Insufficient bytes to fill elements in the given buffer");return Ae(e,s),void t._errorSteps(s)}}e._pendingPullIntos.push(l),xe(o,t),ve(e)}else{var c=new a(l.buffer,l.byteOffset,0);t._closeSteps(c)}}(o._readableStreamController,r,t)}function Xe(e){return new TypeError("ReadableStreamBYOBReader.prototype."+e+" can only be used on a ReadableStreamBYOBReader")}function Je(e,r){var t=e.highWaterMark;if(void 0===t)return r;if(le(t)||t<0)throw new RangeError("Invalid highWaterMark");return t}function Ke(e){var r=e.size;return r||function(){return 1}}function Ze(e,r){I(e,r);var t=null==e?void 0:e.highWaterMark,o=null==e?void 0:e.size;return{highWaterMark:void 0===t?void 0:Y(t),size:void 0===o?void 0:$e(o,r+" has member 'size' that")}}function $e(e,r){return F(e,r),function(r){return Y(e(r))}}function er(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function rr(e,r,t){return F(e,t),function(){return S(e,r,[])}}function tr(e,r,t){return F(e,t),function(t){return g(e,r,[t])}}function or(e,r,t){return F(e,t),function(t,o){return S(e,r,[t,o])}}function nr(e,r){if(!sr(e))throw new TypeError(r+" is not a WritableStream.")}Object.defineProperties(Ve.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Ve.prototype,r.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});var ar="function"==typeof AbortController;var ir=function(){function WritableStream(e,r){void 0===e&&(e={}),void 0===r&&(r={}),void 0===e?e=null:L(e,"First parameter");var t=Ze(r,"Second parameter"),o=function(e,r){I(e,r);var t=null==e?void 0:e.abort,o=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,i=null==e?void 0:e.write;return{abort:void 0===t?void 0:er(t,e,r+" has member 'abort' that"),close:void 0===o?void 0:rr(o,e,r+" has member 'close' that"),start:void 0===n?void 0:tr(n,e,r+" has member 'start' that"),write:void 0===i?void 0:or(i,e,r+" has member 'write' that"),type:a}}(e,"First parameter");if(ur(this),void 0!==o.type)throw new RangeError("Invalid type is specified");var n=Ke(t);!function(e,r,t,o){var n=Object.create(qr.prototype),a=function(){},i=function(){return d(void 0)},l=function(){return d(void 0)},u=function(){return d(void 0)};void 0!==r.start&&(a=function(){return r.start(n)});void 0!==r.write&&(i=function(e){return r.write(e,n)});void 0!==r.close&&(l=function(){return r.close()});void 0!==r.abort&&(u=function(e){return r.abort(e)});Er(e,n,a,i,l,u,t,o)}(this,o,Je(t,1),n)}return Object.defineProperty(WritableStream.prototype,"locked",{get:function(){if(!sr(this))throw Dr("locked");return cr(this)},enumerable:!1,configurable:!0}),WritableStream.prototype.abort=function(e){return void 0===e&&(e=void 0),sr(this)?cr(this)?f(new TypeError("Cannot abort a stream that already has a writer")):dr(this,e):f(Dr("abort"))},WritableStream.prototype.close=function(){return sr(this)?cr(this)?f(new TypeError("Cannot close a stream that already has a writer")):hr(this)?f(new TypeError("Cannot close an already-closing stream")):fr(this):f(Dr("close"))},WritableStream.prototype.getWriter=function(){if(!sr(this))throw Dr("getWriter");return lr(this)},WritableStream}();function lr(e){return new vr(e)}function ur(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new w,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function sr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")&&e instanceof ir)}function cr(e){return void 0!==e._writer}function dr(e,r){var t;if("closed"===e._state||"errored"===e._state)return d(void 0);e._writableStreamController._abortReason=r,null===(t=e._writableStreamController._abortController)||void 0===t||t.abort();var o=e._state;if("closed"===o||"errored"===o)return d(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;var n=!1;"erroring"===o&&(n=!0,r=void 0);var a=c((function(t,o){e._pendingAbortRequest={_promise:void 0,_resolve:t,_reject:o,_reason:r,_wasAlreadyErroring:n}}));return e._pendingAbortRequest._promise=a,n||pr(e,r),a}function fr(e){var r=e._state;if("closed"===r||"errored"===r)return f(new TypeError("The stream (in "+r+" state) is not in the writable state and cannot be closed"));var t,o=c((function(r,t){var o={_resolve:r,_reject:t};e._closeRequest=o})),n=e._writer;return void 0!==n&&e._backpressure&&"writable"===r&&Gr(n),be(t=e._writableStreamController,Pr,0),Br(t),o}function br(e,r){"writable"!==e._state?_r(e):pr(e,r)}function pr(e,r){var t=e._writableStreamController;e._state="erroring",e._storedError=r;var o=e._writer;void 0!==o&&Rr(o,r),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&t._started&&_r(e)}function _r(e){e._state="errored",e._writableStreamController[B]();var r=e._storedError;if(e._writeRequests.forEach((function(e){e._reject(r)})),e._writeRequests=new w,void 0!==e._pendingAbortRequest){var t=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,t._wasAlreadyErroring)return t._reject(r),void mr(e);p(e._writableStreamController[j](t._reason),(function(){t._resolve(),mr(e)}),(function(r){t._reject(r),mr(e)}))}else mr(e)}function hr(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function mr(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);var r=e._writer;void 0!==r&&Yr(r,e._storedError)}function yr(e,r){var t=e._writer;void 0!==t&&r!==e._backpressure&&(r?function(e){Nr(e)}(t):Gr(t)),e._backpressure=r}Object.defineProperties(ir.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(ir.prototype,r.toStringTag,{value:"WritableStream",configurable:!0});var vr=function(){function WritableStreamDefaultWriter(e){if(M(e,1,"WritableStreamDefaultWriter"),nr(e,"First parameter"),cr(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;var r,t=e._state;if("writable"===t)!hr(e)&&e._backpressure?Nr(this):Vr(this),Mr(this);else if("erroring"===t)Hr(this,e._storedError),Mr(this);else if("closed"===t)Vr(this),Mr(r=this),xr(r);else{var o=e._storedError;Hr(this,o),Qr(this,o)}}return Object.defineProperty(WritableStreamDefaultWriter.prototype,"closed",{get:function(){return gr(this)?this._closedPromise:f(Fr("closed"))},enumerable:!1,configurable:!0}),Object.defineProperty(WritableStreamDefaultWriter.prototype,"desiredSize",{get:function(){if(!gr(this))throw Fr("desiredSize");if(void 0===this._ownerWritableStream)throw Lr("desiredSize");return function(e){var r=e._ownerWritableStream,t=r._state;if("errored"===t||"erroring"===t)return null;if("closed"===t)return 0;return jr(r._writableStreamController)}(this)},enumerable:!1,configurable:!0}),Object.defineProperty(WritableStreamDefaultWriter.prototype,"ready",{get:function(){return gr(this)?this._readyPromise:f(Fr("ready"))},enumerable:!1,configurable:!0}),WritableStreamDefaultWriter.prototype.abort=function(e){return void 0===e&&(e=void 0),gr(this)?void 0===this._ownerWritableStream?f(Lr("abort")):function(e,r){return dr(e._ownerWritableStream,r)}(this,e):f(Fr("abort"))},WritableStreamDefaultWriter.prototype.close=function(){if(!gr(this))return f(Fr("close"));var e=this._ownerWritableStream;return void 0===e?f(Lr("close")):hr(e)?f(new TypeError("Cannot close an already-closing stream")):Sr(this)},WritableStreamDefaultWriter.prototype.releaseLock=function(){if(!gr(this))throw Fr("releaseLock");void 0!==this._ownerWritableStream&&Tr(this)},WritableStreamDefaultWriter.prototype.write=function(e){return void 0===e&&(e=void 0),gr(this)?void 0===this._ownerWritableStream?f(Lr("write to")):Cr(this,e):f(Fr("write"))},WritableStreamDefaultWriter}();function gr(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")&&e instanceof vr)}function Sr(e){return fr(e._ownerWritableStream)}function wr(e,r){"pending"===e._closedPromiseState?Yr(e,r):function(e,r){Qr(e,r)}(e,r)}function Rr(e,r){"pending"===e._readyPromiseState?Ur(e,r):function(e,r){Hr(e,r)}(e,r)}function Tr(e){var r=e._ownerWritableStream,t=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");Rr(e,t),wr(e,t),r._writer=void 0,e._ownerWritableStream=void 0}function Cr(e,r){var t=e._ownerWritableStream,o=t._writableStreamController,n=function(e,r){try{return e._strategySizeAlgorithm(r)}catch(r){return kr(e,r),1}}(o,r);if(t!==e._ownerWritableStream)return f(Lr("write to"));var a=t._state;if("errored"===a)return f(t._storedError);if(hr(t)||"closed"===a)return f(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return f(t._storedError);var i=function(e){return c((function(r,t){var o={_resolve:r,_reject:t};e._writeRequests.push(o)}))}(t);return function(e,r,t){try{be(e,r,t)}catch(r){return void kr(e,r)}var o=e._controlledWritableStream;if(!hr(o)&&"writable"===o._state){yr(o,Ar(e))}Br(e)}(o,r,n),i}Object.defineProperties(vr.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(vr.prototype,r.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});var Pr={},qr=function(){function WritableStreamDefaultController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(WritableStreamDefaultController.prototype,"abortReason",{get:function(){if(!Or(this))throw Ir("abortReason");return this._abortReason},enumerable:!1,configurable:!0}),Object.defineProperty(WritableStreamDefaultController.prototype,"signal",{get:function(){if(!Or(this))throw Ir("signal");if(void 0===this._abortController)throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");return this._abortController.signal},enumerable:!1,configurable:!0}),WritableStreamDefaultController.prototype.error=function(e){if(void 0===e&&(e=void 0),!Or(this))throw Ir("error");"writable"===this._controlledWritableStream._state&&zr(this,e)},WritableStreamDefaultController.prototype[j]=function(e){var r=this._abortAlgorithm(e);return Wr(this),r},WritableStreamDefaultController.prototype[B]=function(){pe(this)},WritableStreamDefaultController}();function Or(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream")&&e instanceof qr)}function Er(e,r,t,o,n,a,i,l){r._controlledWritableStream=e,e._writableStreamController=r,r._queue=void 0,r._queueTotalSize=void 0,pe(r),r._abortReason=void 0,r._abortController=function(){if(ar)return new AbortController}(),r._started=!1,r._strategySizeAlgorithm=l,r._strategyHWM=i,r._writeAlgorithm=o,r._closeAlgorithm=n,r._abortAlgorithm=a;var u=Ar(r);yr(e,u),p(d(t()),(function(){r._started=!0,Br(r)}),(function(t){r._started=!0,br(e,t)}))}function Wr(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function jr(e){return e._strategyHWM-e._queueTotalSize}function Br(e){var r=e._controlledWritableStream;if(e._started&&void 0===r._inFlightWriteRequest)if("erroring"!==r._state){if(0!==e._queue.length){var t=e._queue.peek().value;t===Pr?function(e){var r=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(r),fe(e);var t=e._closeAlgorithm();Wr(e),p(t,(function(){!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";var r=e._writer;void 0!==r&&xr(r)}(r)}),(function(e){!function(e,r){e._inFlightCloseRequest._reject(r),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(r),e._pendingAbortRequest=void 0),br(e,r)}(r,e)}))}(e):function(e,r){var t=e._controlledWritableStream;(function(e){e._inFlightWriteRequest=e._writeRequests.shift()})(t),p(e._writeAlgorithm(r),(function(){!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(t);var r=t._state;if(fe(e),!hr(t)&&"writable"===r){var o=Ar(e);yr(t,o)}Br(e)}),(function(r){"writable"===t._state&&Wr(e),function(e,r){e._inFlightWriteRequest._reject(r),e._inFlightWriteRequest=void 0,br(e,r)}(t,r)}))}(e,t)}}else _r(r)}function kr(e,r){"writable"===e._controlledWritableStream._state&&zr(e,r)}function Ar(e){return jr(e)<=0}function zr(e,r){var t=e._controlledWritableStream;Wr(e),pr(t,r)}function Dr(e){return new TypeError("WritableStream.prototype."+e+" can only be used on a WritableStream")}function Ir(e){return new TypeError("WritableStreamDefaultController.prototype."+e+" can only be used on a WritableStreamDefaultController")}function Fr(e){return new TypeError("WritableStreamDefaultWriter.prototype."+e+" can only be used on a WritableStreamDefaultWriter")}function Lr(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function Mr(e){e._closedPromise=c((function(r,t){e._closedPromise_resolve=r,e._closedPromise_reject=t,e._closedPromiseState="pending"}))}function Qr(e,r){Mr(e),Yr(e,r)}function Yr(e,r){void 0!==e._closedPromise_reject&&(y(e._closedPromise),e._closedPromise_reject(r),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function xr(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function Nr(e){e._readyPromise=c((function(r,t){e._readyPromise_resolve=r,e._readyPromise_reject=t})),e._readyPromiseState="pending"}function Hr(e,r){Nr(e),Ur(e,r)}function Vr(e){Nr(e),Gr(e)}function Ur(e,r){void 0!==e._readyPromise_reject&&(y(e._readyPromise),e._readyPromise_reject(r),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function Gr(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(qr.prototype,{abortReason:{enumerable:!0},signal:{enumerable:!0},error:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(qr.prototype,r.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});var Xr="undefined"!=typeof DOMException?DOMException:void 0;var Jr,Kr=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(Xr)?Xr:((Jr=function(e,r){this.message=e||"",this.name=r||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}).prototype=Object.create(Error.prototype),Object.defineProperty(Jr.prototype,"constructor",{value:Jr,writable:!0,configurable:!0}),Jr);function Zr(e,r,o,n,a,i){var l=V(e),u=lr(r);e._disturbed=!0;var s=!1,m=d(void 0);return c((function(v,g){var S,w,R,T;if(void 0!==i){if(S=function(){var t=new Kr("Aborted","AbortError"),o=[];n||o.push((function(){return"writable"===r._state?dr(r,t):d(void 0)})),a||o.push((function(){return"readable"===e._state?Tt(e,t):d(void 0)})),E((function(){return Promise.all(o.map((function(e){return e()})))}),!0,t)},i.aborted)return void S();i.addEventListener("abort",S)}if(O(e,l._closedPromise,(function(e){n?W(!0,e):E((function(){return dr(r,e)}),!0,e)})),O(r,u._closedPromise,(function(r){a?W(!0,r):E((function(){return Tt(e,r)}),!0,r)})),w=e,R=l._closedPromise,T=function(){o?W():E((function(){return function(e){var r=e._ownerWritableStream,t=r._state;return hr(r)||"closed"===t?d(void 0):"errored"===t?f(r._storedError):Sr(e)}(u)}))},"closed"===w._state?T():_(R,T),hr(r)||"closed"===r._state){var P=new TypeError("the destination writable stream closed before all data could be piped to it");a?W(!0,P):E((function(){return Tt(e,P)}),!0,P)}function q(){var e=m;return b(m,(function(){return e!==m?q():void 0}))}function O(e,r,t){"errored"===e._state?t(e._storedError):h(r,t)}function E(e,t,o){function n(){p(e(),(function(){return j(t,o)}),(function(e){return j(!0,e)}))}s||(s=!0,"writable"!==r._state||hr(r)?n():_(q(),n))}function W(e,t){s||(s=!0,"writable"!==r._state||hr(r)?j(e,t):_(q(),(function(){return j(e,t)})))}function j(e,r){Tr(u),C(l),void 0!==i&&i.removeEventListener("abort",S),e?g(r):v(void 0)}y(c((function(e,r){!function o(n){n?e():b(s?d(!0):b(u._readyPromise,(function(){return c((function(e,r){re(l,{_chunkSteps:function(r){m=b(Cr(u,r),void 0,t),e(!1)},_closeSteps:function(){return e(!0)},_errorSteps:r})}))})),o,r)}(!1)})))}))}var $r=function(){function ReadableStreamDefaultController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(ReadableStreamDefaultController.prototype,"desiredSize",{get:function(){if(!et(this))throw ct("desiredSize");return lt(this)},enumerable:!1,configurable:!0}),ReadableStreamDefaultController.prototype.close=function(){if(!et(this))throw ct("close");if(!ut(this))throw new TypeError("The stream is not in a state that permits close");nt(this)},ReadableStreamDefaultController.prototype.enqueue=function(e){if(void 0===e&&(e=void 0),!et(this))throw ct("enqueue");if(!ut(this))throw new TypeError("The stream is not in a state that permits enqueue");return at(this,e)},ReadableStreamDefaultController.prototype.error=function(e){if(void 0===e&&(e=void 0),!et(this))throw ct("error");it(this,e)},ReadableStreamDefaultController.prototype[k]=function(e){pe(this);var r=this._cancelAlgorithm(e);return ot(this),r},ReadableStreamDefaultController.prototype[A]=function(e){var r=this._controlledReadableStream;if(this._queue.length>0){var t=fe(this);this._closeRequested&&0===this._queue.length?(ot(this),Ct(r)):rt(this),e._chunkSteps(t)}else U(r,e),rt(this)},ReadableStreamDefaultController}();function et(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")&&e instanceof $r)}function rt(e){tt(e)&&(e._pulling?e._pullAgain=!0:(e._pulling=!0,p(e._pullAlgorithm(),(function(){e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,rt(e))}),(function(r){it(e,r)}))))}function tt(e){var r=e._controlledReadableStream;return!!ut(e)&&(!!e._started&&(!!(Rt(r)&&X(r)>0)||lt(e)>0))}function ot(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function nt(e){if(ut(e)){var r=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(ot(e),Ct(r))}}function at(e,r){if(ut(e)){var t=e._controlledReadableStream;if(Rt(t)&&X(t)>0)G(t,r,!1);else{var o=void 0;try{o=e._strategySizeAlgorithm(r)}catch(r){throw it(e,r),r}try{be(e,r,o)}catch(r){throw it(e,r),r}}rt(e)}}function it(e,r){var t=e._controlledReadableStream;"readable"===t._state&&(pe(e),ot(e),Pt(t,r))}function lt(e){var r=e._controlledReadableStream._state;return"errored"===r?null:"closed"===r?0:e._strategyHWM-e._queueTotalSize}function ut(e){var r=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===r}function st(e,r,t,o,n,a,i){r._controlledReadableStream=e,r._queue=void 0,r._queueTotalSize=void 0,pe(r),r._started=!1,r._closeRequested=!1,r._pullAgain=!1,r._pulling=!1,r._strategySizeAlgorithm=i,r._strategyHWM=a,r._pullAlgorithm=o,r._cancelAlgorithm=n,e._readableStreamController=r,p(d(t()),(function(){r._started=!0,rt(r)}),(function(e){it(r,e)}))}function ct(e){return new TypeError("ReadableStreamDefaultController.prototype."+e+" can only be used on a ReadableStreamDefaultController")}function dt(e,r){return me(e._readableStreamController)?function(e){var r,t,o,n,a,i=V(e),l=!1,u=!1,s=!1,f=!1,b=!1,p=c((function(e){a=e}));function _(e){h(e._closedPromise,(function(r){e===i&&(Ae(o._readableStreamController,r),Ae(n._readableStreamController,r),f&&b||a(void 0))}))}function m(){Ue(i)&&(C(i),_(i=V(e))),re(i,{_chunkSteps:function(r){v((function(){u=!1,s=!1;var t=r,i=r;if(!f&&!b)try{i=de(r)}catch(r){return Ae(o._readableStreamController,r),Ae(n._readableStreamController,r),void a(Tt(e,r))}f||ke(o._readableStreamController,t),b||ke(n._readableStreamController,i),l=!1,u?g():s&&S()}))},_closeSteps:function(){l=!1,f||Be(o._readableStreamController),b||Be(n._readableStreamController),o._readableStreamController._pendingPullIntos.length>0&&Ie(o._readableStreamController,0),n._readableStreamController._pendingPullIntos.length>0&&Ie(n._readableStreamController,0),f&&b||a(void 0)},_errorSteps:function(){l=!1}})}function y(r,t){ee(i)&&(C(i),_(i=Ye(e)));var c=t?n:o,d=t?o:n;Ge(i,r,{_chunkSteps:function(r){v((function(){u=!1,s=!1;var o=t?b:f;if(t?f:b)o||Fe(c._readableStreamController,r);else{var n=void 0;try{n=de(r)}catch(r){return Ae(c._readableStreamController,r),Ae(d._readableStreamController,r),void a(Tt(e,r))}o||Fe(c._readableStreamController,r),ke(d._readableStreamController,n)}l=!1,u?g():s&&S()}))},_closeSteps:function(e){l=!1;var r=t?b:f,o=t?f:b;r||Be(c._readableStreamController),o||Be(d._readableStreamController),void 0!==e&&(r||Fe(c._readableStreamController,e),!o&&d._readableStreamController._pendingPullIntos.length>0&&Ie(d._readableStreamController,0)),r&&o||a(void 0)},_errorSteps:function(){l=!1}})}function g(){if(l)return u=!0,d(void 0);l=!0;var e=ze(o._readableStreamController);return null===e?m():y(e._view,!1),d(void 0)}function S(){if(l)return s=!0,d(void 0);l=!0;var e=ze(n._readableStreamController);return null===e?m():y(e._view,!0),d(void 0)}function w(o){if(f=!0,r=o,b){var n=ue([r,t]),i=Tt(e,n);a(i)}return p}function R(o){if(b=!0,t=o,f){var n=ue([r,t]),i=Tt(e,n);a(i)}return p}function T(){}return o=gt(T,g,w),n=gt(T,S,R),_(i),[o,n]}(e):function(e,r){var t,o,n,a,i,l=V(e),u=!1,s=!1,f=!1,b=!1,p=c((function(e){i=e}));function _(){return u?(s=!0,d(void 0)):(u=!0,re(l,{_chunkSteps:function(e){v((function(){s=!1;var r=e,t=e;f||at(n._readableStreamController,r),b||at(a._readableStreamController,t),u=!1,s&&_()}))},_closeSteps:function(){u=!1,f||nt(n._readableStreamController),b||nt(a._readableStreamController),f&&b||i(void 0)},_errorSteps:function(){u=!1}}),d(void 0))}function m(r){if(f=!0,t=r,b){var n=ue([t,o]),a=Tt(e,n);i(a)}return p}function y(r){if(b=!0,o=r,f){var n=ue([t,o]),a=Tt(e,n);i(a)}return p}function g(){}return n=vt(g,_,m),a=vt(g,_,y),h(l._closedPromise,(function(e){it(n._readableStreamController,e),it(a._readableStreamController,e),f&&b||i(void 0)})),[n,a]}(e)}function ft(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function bt(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function pt(e,r,t){return F(e,t),function(t){return g(e,r,[t])}}function _t(e,r){if("bytes"!==(e=""+e))throw new TypeError(r+" '"+e+"' is not a valid enumeration value for ReadableStreamType");return e}function ht(e,r){if("byob"!==(e=""+e))throw new TypeError(r+" '"+e+"' is not a valid enumeration value for ReadableStreamReaderMode");return e}function mt(e,r){I(e,r);var t=null==e?void 0:e.preventAbort,o=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,r){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(r+" is not an AbortSignal.")}(a,r+" has member 'signal' that"),{preventAbort:Boolean(t),preventCancel:Boolean(o),preventClose:Boolean(n),signal:a}}Object.defineProperties($r.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty($r.prototype,r.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});var yt=function(){function ReadableStream(e,r){void 0===e&&(e={}),void 0===r&&(r={}),void 0===e?e=null:L(e,"First parameter");var t=Ze(r,"Second parameter"),o=function(e,r){I(e,r);var t=e,o=null==t?void 0:t.autoAllocateChunkSize,n=null==t?void 0:t.cancel,a=null==t?void 0:t.pull,i=null==t?void 0:t.start,l=null==t?void 0:t.type;return{autoAllocateChunkSize:void 0===o?void 0:N(o,r+" has member 'autoAllocateChunkSize' that"),cancel:void 0===n?void 0:ft(n,t,r+" has member 'cancel' that"),pull:void 0===a?void 0:bt(a,t,r+" has member 'pull' that"),start:void 0===i?void 0:pt(i,t,r+" has member 'start' that"),type:void 0===l?void 0:_t(l,r+" has member 'type' that")}}(e,"First parameter");if(St(this),"bytes"===o.type){if(void 0!==t.size)throw new RangeError("The strategy for a byte stream cannot have a size function");!function(e,r,t){var o=Object.create(he.prototype),n=function(){},a=function(){return d(void 0)},i=function(){return d(void 0)};void 0!==r.start&&(n=function(){return r.start(o)}),void 0!==r.pull&&(a=function(){return r.pull(o)}),void 0!==r.cancel&&(i=function(e){return r.cancel(e)});var l=r.autoAllocateChunkSize;if(0===l)throw new TypeError("autoAllocateChunkSize must be greater than 0");Le(e,o,n,a,i,t,l)}(this,o,Je(t,0))}else{var n=Ke(t);!function(e,r,t,o){var n=Object.create($r.prototype),a=function(){},i=function(){return d(void 0)},l=function(){return d(void 0)};void 0!==r.start&&(a=function(){return r.start(n)}),void 0!==r.pull&&(i=function(){return r.pull(n)}),void 0!==r.cancel&&(l=function(e){return r.cancel(e)}),st(e,n,a,i,l,t,o)}(this,o,Je(t,1),n)}}return Object.defineProperty(ReadableStream.prototype,"locked",{get:function(){if(!wt(this))throw qt("locked");return Rt(this)},enumerable:!1,configurable:!0}),ReadableStream.prototype.cancel=function(e){return void 0===e&&(e=void 0),wt(this)?Rt(this)?f(new TypeError("Cannot cancel a stream that already has a reader")):Tt(this,e):f(qt("cancel"))},ReadableStream.prototype.getReader=function(e){if(void 0===e&&(e=void 0),!wt(this))throw qt("getReader");return void 0===function(e,r){I(e,r);var t=null==e?void 0:e.mode;return{mode:void 0===t?void 0:ht(t,r+" has member 'mode' that")}}(e,"First parameter").mode?V(this):Ye(this)},ReadableStream.prototype.pipeThrough=function(e,r){if(void 0===r&&(r={}),!wt(this))throw qt("pipeThrough");M(e,1,"pipeThrough");var t=function(e,r){I(e,r);var t=null==e?void 0:e.readable;Q(t,"readable","ReadableWritablePair"),H(t,r+" has member 'readable' that");var o=null==e?void 0:e.writable;return Q(o,"writable","ReadableWritablePair"),nr(o,r+" has member 'writable' that"),{readable:t,writable:o}}(e,"First parameter"),o=mt(r,"Second parameter");if(Rt(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(cr(t.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return y(Zr(this,t.writable,o.preventClose,o.preventAbort,o.preventCancel,o.signal)),t.readable},ReadableStream.prototype.pipeTo=function(e,r){if(void 0===r&&(r={}),!wt(this))return f(qt("pipeTo"));if(void 0===e)return f("Parameter 1 is required in 'pipeTo'.");if(!sr(e))return f(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));var t;try{t=mt(r,"Second parameter")}catch(e){return f(e)}return Rt(this)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):cr(e)?f(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):Zr(this,e,t.preventClose,t.preventAbort,t.preventCancel,t.signal)},ReadableStream.prototype.tee=function(){if(!wt(this))throw qt("tee");return ue(dt(this))},ReadableStream.prototype.values=function(e){if(void 0===e&&(e=void 0),!wt(this))throw qt("values");var r,t,o,n,a,i=function(e,r){I(e,r);var t=null==e?void 0:e.preventCancel;return{preventCancel:Boolean(t)}}(e,"First parameter");return r=this,t=i.preventCancel,o=V(r),n=new oe(o,t),(a=Object.create(ne))._asyncIteratorImpl=n,a},ReadableStream}();function vt(e,r,t,o,n){void 0===o&&(o=1),void 0===n&&(n=function(){return 1});var a=Object.create(yt.prototype);return St(a),st(a,Object.create($r.prototype),e,r,t,o,n),a}function gt(e,r,t){var o=Object.create(yt.prototype);return St(o),Le(o,Object.create(he.prototype),e,r,t,0,void 0),o}function St(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function wt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")&&e instanceof yt)}function Rt(e){return void 0!==e._reader}function Tt(e,r){if(e._disturbed=!0,"closed"===e._state)return d(void 0);if("errored"===e._state)return f(e._storedError);Ct(e);var o=e._reader;return void 0!==o&&Ue(o)&&(o._readIntoRequests.forEach((function(e){e._closeSteps(void 0)})),o._readIntoRequests=new w),m(e._readableStreamController[k](r),t)}function Ct(e){e._state="closed";var r=e._reader;void 0!==r&&(W(r),ee(r)&&(r._readRequests.forEach((function(e){e._closeSteps()})),r._readRequests=new w))}function Pt(e,r){e._state="errored",e._storedError=r;var t=e._reader;void 0!==t&&(E(t,r),ee(t)?(t._readRequests.forEach((function(e){e._errorSteps(r)})),t._readRequests=new w):(t._readIntoRequests.forEach((function(e){e._errorSteps(r)})),t._readIntoRequests=new w))}function qt(e){return new TypeError("ReadableStream.prototype."+e+" can only be used on a ReadableStream")}function Ot(e,r){I(e,r);var t=null==e?void 0:e.highWaterMark;return Q(t,"highWaterMark","QueuingStrategyInit"),{highWaterMark:Y(t)}}Object.defineProperties(yt.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(yt.prototype,r.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof r.asyncIterator&&Object.defineProperty(yt.prototype,r.asyncIterator,{value:yt.prototype.values,writable:!0,configurable:!0});var Et=function(e){return e.byteLength};try{Object.defineProperty(Et,"name",{value:"size",configurable:!0})}catch(K){}var Wt=function(){function ByteLengthQueuingStrategy(e){M(e,1,"ByteLengthQueuingStrategy"),e=Ot(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}return Object.defineProperty(ByteLengthQueuingStrategy.prototype,"highWaterMark",{get:function(){if(!Bt(this))throw jt("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark},enumerable:!1,configurable:!0}),Object.defineProperty(ByteLengthQueuingStrategy.prototype,"size",{get:function(){if(!Bt(this))throw jt("size");return Et},enumerable:!1,configurable:!0}),ByteLengthQueuingStrategy}();function jt(e){return new TypeError("ByteLengthQueuingStrategy.prototype."+e+" can only be used on a ByteLengthQueuingStrategy")}function Bt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")&&e instanceof Wt)}Object.defineProperties(Wt.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Wt.prototype,r.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});var kt=function(){return 1};try{Object.defineProperty(kt,"name",{value:"size",configurable:!0})}catch(K){}var At=function(){function CountQueuingStrategy(e){M(e,1,"CountQueuingStrategy"),e=Ot(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}return Object.defineProperty(CountQueuingStrategy.prototype,"highWaterMark",{get:function(){if(!Dt(this))throw zt("highWaterMark");return this._countQueuingStrategyHighWaterMark},enumerable:!1,configurable:!0}),Object.defineProperty(CountQueuingStrategy.prototype,"size",{get:function(){if(!Dt(this))throw zt("size");return kt},enumerable:!1,configurable:!0}),CountQueuingStrategy}();function zt(e){return new TypeError("CountQueuingStrategy.prototype."+e+" can only be used on a CountQueuingStrategy")}function Dt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")&&e instanceof At)}function It(e,r,t){return F(e,t),function(t){return S(e,r,[t])}}function Ft(e,r,t){return F(e,t),function(t){return g(e,r,[t])}}function Lt(e,r,t){return F(e,t),function(t,o){return S(e,r,[t,o])}}Object.defineProperties(At.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(At.prototype,r.toStringTag,{value:"CountQueuingStrategy",configurable:!0});var Mt=function(){function TransformStream(e,r,t){void 0===e&&(e={}),void 0===r&&(r={}),void 0===t&&(t={}),void 0===e&&(e=null);var o=Ze(r,"Second parameter"),n=Ze(t,"Third parameter"),a=function(e,r){I(e,r);var t=null==e?void 0:e.flush,o=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,i=null==e?void 0:e.writableType;return{flush:void 0===t?void 0:It(t,e,r+" has member 'flush' that"),readableType:o,start:void 0===n?void 0:Ft(n,e,r+" has member 'start' that"),transform:void 0===a?void 0:Lt(a,e,r+" has member 'transform' that"),writableType:i}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");var i,l=Je(n,0),u=Ke(n),s=Je(o,1),b=Ke(o);!function(e,r,t,o,n,a){function i(){return r}function l(r){return function(e,r){var t=e._transformStreamController;if(e._backpressure){return m(e._backpressureChangePromise,(function(){var o=e._writable;if("erroring"===o._state)throw o._storedError;return Xt(t,r)}))}return Xt(t,r)}(e,r)}function u(r){return function(e,r){return Yt(e,r),d(void 0)}(e,r)}function s(){return function(e){var r=e._readable,t=e._transformStreamController,o=t._flushAlgorithm();return Ut(t),m(o,(function(){if("errored"===r._state)throw r._storedError;nt(r._readableStreamController)}),(function(t){throw Yt(e,t),r._storedError}))}(e)}function c(){return function(e){return Nt(e,!1),e._backpressureChangePromise}(e)}function f(r){return xt(e,r),d(void 0)}e._writable=function(e,r,t,o,n,a){void 0===n&&(n=1),void 0===a&&(a=function(){return 1});var i=Object.create(ir.prototype);return ur(i),Er(i,Object.create(qr.prototype),e,r,t,o,n,a),i}(i,l,s,u,t,o),e._readable=vt(i,c,f,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,Nt(e,!0),e._transformStreamController=void 0}(this,c((function(e){i=e})),s,b,l,u),function(e,r){var t=Object.create(Ht.prototype),o=function(e){try{return Gt(t,e),d(void 0)}catch(e){return f(e)}},n=function(){return d(void 0)};void 0!==r.transform&&(o=function(e){return r.transform(e,t)});void 0!==r.flush&&(n=function(){return r.flush(t)});!function(e,r,t,o){r._controlledTransformStream=e,e._transformStreamController=r,r._transformAlgorithm=t,r._flushAlgorithm=o}(e,t,o,n)}(this,a),void 0!==a.start?i(a.start(this._transformStreamController)):i(void 0)}return Object.defineProperty(TransformStream.prototype,"readable",{get:function(){if(!Qt(this))throw Kt("readable");return this._readable},enumerable:!1,configurable:!0}),Object.defineProperty(TransformStream.prototype,"writable",{get:function(){if(!Qt(this))throw Kt("writable");return this._writable},enumerable:!1,configurable:!0}),TransformStream}();function Qt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")&&e instanceof Mt)}function Yt(e,r){it(e._readable._readableStreamController,r),xt(e,r)}function xt(e,r){Ut(e._transformStreamController),kr(e._writable._writableStreamController,r),e._backpressure&&Nt(e,!1)}function Nt(e,r){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=c((function(r){e._backpressureChangePromise_resolve=r})),e._backpressure=r}Object.defineProperties(Mt.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Mt.prototype,r.toStringTag,{value:"TransformStream",configurable:!0});var Ht=function(){function TransformStreamDefaultController(){throw new TypeError("Illegal constructor")}return Object.defineProperty(TransformStreamDefaultController.prototype,"desiredSize",{get:function(){if(!Vt(this))throw Jt("desiredSize");return lt(this._controlledTransformStream._readable._readableStreamController)},enumerable:!1,configurable:!0}),TransformStreamDefaultController.prototype.enqueue=function(e){if(void 0===e&&(e=void 0),!Vt(this))throw Jt("enqueue");Gt(this,e)},TransformStreamDefaultController.prototype.error=function(e){if(void 0===e&&(e=void 0),!Vt(this))throw Jt("error");var r;r=e,Yt(this._controlledTransformStream,r)},TransformStreamDefaultController.prototype.terminate=function(){if(!Vt(this))throw Jt("terminate");!function(e){var r=e._controlledTransformStream;nt(r._readable._readableStreamController);var t=new TypeError("TransformStream terminated");xt(r,t)}(this)},TransformStreamDefaultController}();function Vt(e){return!!n(e)&&(!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")&&e instanceof Ht)}function Ut(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function Gt(e,r){var t=e._controlledTransformStream,o=t._readable._readableStreamController;if(!ut(o))throw new TypeError("Readable side is not in a state that permits enqueue");try{at(o,r)}catch(e){throw xt(t,e),t._readable._storedError}(function(e){return!tt(e)})(o)!==t._backpressure&&Nt(t,!0)}function Xt(e,r){return m(e._transformAlgorithm(r),void 0,(function(r){throw Yt(e._controlledTransformStream,r),r}))}function Jt(e){return new TypeError("TransformStreamDefaultController.prototype."+e+" can only be used on a TransformStreamDefaultController")}function Kt(e){return new TypeError("TransformStream.prototype."+e+" can only be used on a TransformStream")}Object.defineProperties(Ht.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof r.toStringTag&&Object.defineProperty(Ht.prototype,r.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});var Zt={ReadableStream:yt,ReadableStreamDefaultController:$r,ReadableByteStreamController:he,ReadableStreamBYOBRequest:_e,ReadableStreamDefaultReader:$,ReadableStreamBYOBReader:Ve,WritableStream:ir,WritableStreamDefaultController:qr,WritableStreamDefaultWriter:vr,ByteLengthQueuingStrategy:Wt,CountQueuingStrategy:At,TransformStream:Mt,TransformStreamDefaultController:Ht};if(void 0!==o)for(var $t in Zt)Object.prototype.hasOwnProperty.call(Zt,$t)&&Object.defineProperty(o,$t,{value:Zt[$t],writable:!0,configurable:!0});e.ByteLengthQueuingStrategy=Wt,e.CountQueuingStrategy=At,e.ReadableByteStreamController=he,e.ReadableStream=yt,e.ReadableStreamBYOBReader=Ve,e.ReadableStreamBYOBRequest=_e,e.ReadableStreamDefaultController=$r,e.ReadableStreamDefaultReader=$,e.TransformStream=Mt,e.TransformStreamDefaultController=Ht,e.WritableStream=ir,e.WritableStreamDefaultController=qr,e.WritableStreamDefaultWriter=vr,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=polyfill.min.js.map diff --git a/node_modules/web-streams-polyfill/dist/polyfill.min.js.map b/node_modules/web-streams-polyfill/dist/polyfill.min.js.map index 0758f58..347ac89 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.min.js.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.min.js.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","noop","globals","self","window","global","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","this","_front","_elements","_next","_back","_cursor","_size","Object","SimpleQueue","element","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","length","push","oldFront","newFront","oldCursor","newCursor","elements","callback","i","node","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","shift","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","AsyncIteratorPrototype","IsReadableStreamLocked","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","hasOwnProperty","_disturbed","_readableStreamController","defineProperties","cancel","enumerable","read","releaseLock","closed","toStringTag","defineProperty","configurable","asyncIterator","preventCancel","_preventCancel","ReadableStreamAsyncIteratorImpl","nextSteps","_this","_nextSteps","_ongoingPromise","returnSteps","_returnSteps","_isFinished","result","ReadableStreamAsyncIteratorPrototype","next","IsReadableStreamAsyncIterator","_asyncIteratorImpl","streamAsyncIteratorBrandCheckException","return","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","pair","_queue","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","view","isView","ReadableByteStreamControllerRespondWithNewView","respond","respondWithNewView","ReadableByteStreamController","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","ReadableByteStreamControllerGetDesiredSize","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","peek","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","byobRequest","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","close","enqueue","error","desiredSize","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","AbortController","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","WritableStream","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","forEach","writeRequest","abortRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","getWriter","locked","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","abortReason","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","action","actions","shutdownWithAction","all","map","aborted","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed_1","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","isAbortSignal","assertAbortSignal","Boolean","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","ReadableStream","rawOptions","convertReaderOptions","rawTransform","transform","readable","convertReadableWritablePair","destination","impl","convertIteratorOptions","convertQueuingStrategyInit","getReader","pipeThrough","pipeTo","tee","values","byteLengthSizeFunction","_byteLengthQueuingStrategyHighWaterMark","ByteLengthQueuingStrategy","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","_countQueuingStrategyHighWaterMark","CountQueuingStrategy","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","startPromise_resolve","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","TransformStream","IsTransformStream","IsTransformStreamDefaultController","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","terminate","exports","prop"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"polyfill.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","noop","globals","self","window","global","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","this","_front","_elements","_next","_back","_cursor","_size","Object","SimpleQueue","element","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","length","push","oldFront","newFront","oldCursor","newCursor","elements","callback","i","node","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","shift","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","AsyncIteratorPrototype","IsReadableStreamLocked","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","hasOwnProperty","_disturbed","_readableStreamController","defineProperties","cancel","enumerable","read","releaseLock","closed","toStringTag","defineProperty","configurable","asyncIterator","preventCancel","_preventCancel","ReadableStreamAsyncIteratorImpl","nextSteps","_this","_nextSteps","_ongoingPromise","returnSteps","_returnSteps","_isFinished","result","ReadableStreamAsyncIteratorPrototype","next","IsReadableStreamAsyncIterator","_asyncIteratorImpl","streamAsyncIteratorBrandCheckException","return","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","pair","_queue","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","view","isView","ReadableByteStreamControllerRespondWithNewView","respond","respondWithNewView","ReadableByteStreamController","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","ReadableByteStreamControllerGetDesiredSize","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","peek","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","byobRequest","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","close","enqueue","error","desiredSize","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","AbortController","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","WritableStream","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","forEach","writeRequest","abortRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","getWriter","locked","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","abortReason","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","action","actions","shutdownWithAction","all","map","aborted","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed_1","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","isAbortSignal","assertAbortSignal","Boolean","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","ReadableStream","rawOptions","convertReaderOptions","rawTransform","transform","readable","convertReadableWritablePair","destination","impl","convertIteratorOptions","convertQueuingStrategyInit","getReader","pipeThrough","pipeTo","tee","values","byteLengthSizeFunction","_byteLengthQueuingStrategyHighWaterMark","ByteLengthQueuingStrategy","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","_countQueuingStrategyHighWaterMark","CountQueuingStrategy","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","startPromise_resolve","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","TransformStream","IsTransformStream","IsTransformStreamDefaultController","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","terminate","exports","prop"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/polyfill.mjs b/node_modules/web-streams-polyfill/dist/polyfill.mjs index c2acef0..e033af5 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.mjs +++ b/node_modules/web-streams-polyfill/dist/polyfill.mjs @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ /// var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? @@ -3800,10 +3800,16 @@ function convertQueuingStrategyInit(init, context) { var byteLengthSizeFunction = function (chunk) { return chunk.byteLength; }; -Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3871,10 +3877,16 @@ function IsByteLengthQueuingStrategy(x) { var countSizeFunction = function () { return 1; }; -Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/polyfill.mjs.map b/node_modules/web-streams-polyfill/dist/polyfill.mjs.map index 7e9dd7a..0d18d05 100644 --- a/node_modules/web-streams-polyfill/dist/polyfill.mjs.map +++ b/node_modules/web-streams-polyfill/dist/polyfill.mjs.map @@ -1 +1 @@ -{"version":3,"file":"polyfill.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":";;;AAAA;AAEA,IAAM,cAAc,GAClB,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;IACjE,MAAM;IACN,UAAA,WAAW,IAAI,OAAA,YAAU,WAAW,MAAoB,GAAA;;ACL5D;SAEgB,IAAI;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAC;KACf;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAEM,IAAM,OAAO,GAAG,UAAU,EAAE;;SCdnB,YAAY,CAAC,CAAM;IACjC,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1E,CAAC;AAEM,IAAM,8BAA8B,GAUrC,IAAI;;ACbV,IAAM,eAAe,GAAG,OAAO,CAAC;AAChC,IAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AACnD,IAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrE,IAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAEnD,UAAU,CAAI,QAGrB;IACP,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;SAEe,mBAAmB,CAAI,KAAyB;IAC9D,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;SAEe,mBAAmB,CAAY,MAAW;IACxD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;SAEe,kBAAkB,CAChC,OAAmB,EACnB,WAA4D,EAC5D,UAA8D;;;IAG9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAiC,CAAC;AACpG,CAAC;SAEe,WAAW,CACzB,OAAmB,EACnB,WAAoD,EACpD,UAAsD;IACtD,kBAAkB,CAChB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EACpD,SAAS,EACT,8BAA8B,CAC/B,CAAC;AACJ,CAAC;SAEe,eAAe,CAAI,OAAmB,EAAE,WAAmD;IACzG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACpC,CAAC;SAEe,aAAa,CAAC,OAAyB,EAAE,UAAqD;IAC5G,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;SAEe,oBAAoB,CAClC,OAAmB,EACnB,kBAAmE,EACnE,gBAAoE;IACpE,OAAO,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC;SAEe,yBAAyB,CAAC,OAAyB;IACjE,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,8BAA8B,CAAC,CAAC;AACzE,CAAC;AAEM,IAAM,cAAc,GAA6B,CAAC;IACvD,IAAM,oBAAoB,GAAG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAC/D,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE;QAC9C,OAAO,oBAAoB,CAAC;KAC7B;IAED,IAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,UAAC,EAAc,IAAK,OAAA,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC,GAAA,CAAC;AACrE,CAAC,GAAG,CAAC;SAEW,WAAW,CAAwB,CAA+B,EAAE,CAAI,EAAE,IAAO;IAC/F,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;KACnD;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;SAEe,WAAW,CAAwB,CAAgD,EAChD,CAAI,EACJ,IAAO;IAIxD,IAAI;QACF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KACrD;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;AACH;;ACzFA;AACA;AAEA,IAAM,oBAAoB,GAAG,KAAK,CAAC;AAOnC;;;;;;AAMA;IAME;QAHQ,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,CAAC,CAAC;;QAIhB,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;;;;QAIzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;;QAEjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChB;IAED,sBAAI,+BAAM;aAAV;YACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;OAAA;;;;;IAMD,0BAAI,GAAJ,UAAK,OAAU;QACb,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,GAAG,OAAO,CACe;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,oBAAoB,GAAG,CAAC,EAAE;YACzD,OAAO,GAAG;gBACR,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,SAAS;aACjB,CAAC;SACH;;;QAID,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;SACzB;QACD,EAAE,IAAI,CAAC,KAAK,CAAC;KACd;;;IAID,2BAAK,GAAL;QAGE,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAE9B,IAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,IAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,oBAAoB,EAAE;YAGtC,QAAQ,GAAG,QAAQ,CAAC,KAAM,CAAC;YAC3B,SAAS,GAAG,CAAC,CAAC;SACf;;QAGD,EAAE,IAAI,CAAC,KAAK,CAAC;QACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;SACxB;;QAGD,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAU,CAAC;QAEjC,OAAO,OAAO,CAAC;KAChB;;;;;;;;;IAUD,6BAAO,GAAP,UAAQ,QAA8B;QACpC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACrB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,OAAO,CAAC,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACxD,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;gBAGzB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;gBACnB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,CAAC,GAAG,CAAC,CAAC;gBACN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,MAAM;iBACP;aACF;YACD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,EAAE,CAAC,CAAC;SACL;KACF;;;IAID,0BAAI,GAAJ;QAGE,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAChC;IACH,kBAAC;AAAD,CAAC;;SCtIe,qCAAqC,CAAI,MAA+B,EAAE,MAAyB;IACjH,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IAExB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,oCAAoC,CAAC,MAAM,CAAC,CAAC;KAC9C;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QACrC,8CAA8C,CAAC,MAAM,CAAC,CAAC;KACxD;SAAM;QAGL,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;KAC7E;AACH,CAAC;AAED;AACA;SAEgB,iCAAiC,CAAC,MAAiC,EAAE,MAAW;IAC9F,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CACb;IAC7B,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;SAEe,kCAAkC,CAAC,MAAiC;IAIlF,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,UAAU,EAAE;QACrD,gCAAgC,CAC9B,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;KACtG;SAAM;QACL,yCAAyC,CACvC,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;KACtG;IAED,MAAM,CAAC,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;IAChD,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED;SAEgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;AAC/E,CAAC;AAED;SAEgB,oCAAoC,CAAC,MAAiC;IACpF,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;SAEe,8CAA8C,CAAC,MAAiC,EAAE,MAAW;IAC3G,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;SAEe,8CAA8C,CAAC,MAAiC;IAC9F,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;SAEe,gCAAgC,CAAC,MAAiC,EAAE,MAAW;IAC7F,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;SAEe,yCAAyC,CAAC,MAAiC,EAAE,MAAW;IAItG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;SAEe,iCAAiC,CAAC,MAAiC;IACjF,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;QAC/C,OAAO;KACR;IAED,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C;;ACjGO,IAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAM,WAAW,GAAGA,cAAM,CAAC,iBAAiB,CAAC,CAAC;AAC9C,IAAM,SAAS,GAAGA,cAAM,CAAC,eAAe,CAAC;;ACHhD;AAEA;AACA,IAAM,cAAc,GAA2B,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC3E,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACLD;AAEA;AACA,IAAM,SAAS,GAAsB,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACFD;SACgB,YAAY,CAAC,CAAM;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1D,CAAC;SAEe,gBAAgB,CAAC,GAAY,EACZ,OAAe;IAC9C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QAC3C,MAAM,IAAI,SAAS,CAAI,OAAO,uBAAoB,CAAC,CAAC;KACrD;AACH,CAAC;AAID;SACgB,cAAc,CAAC,CAAU,EAAE,OAAe;IACxD,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CAAI,OAAO,wBAAqB,CAAC,CAAC;KACtD;AACH,CAAC;AAED;SACgB,QAAQ,CAAC,CAAM;IAC7B,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1E,CAAC;SAEe,YAAY,CAAC,CAAU,EACV,OAAe;IAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QAChB,MAAM,IAAI,SAAS,CAAI,OAAO,uBAAoB,CAAC,CAAC;KACrD;AACH,CAAC;SAEe,sBAAsB,CAAgB,CAAgB,EAChB,QAAgB,EAChB,OAAe;IACnE,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,SAAS,CAAC,eAAa,QAAQ,yBAAoB,OAAO,OAAI,CAAC,CAAC;KAC3E;AACH,CAAC;SAEe,mBAAmB,CAAgB,CAAgB,EAChB,KAAa,EACb,OAAe;IAChE,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,SAAS,CAAI,KAAK,yBAAoB,OAAO,OAAI,CAAC,CAAC;KAC9D;AACH,CAAC;AAED;SACgB,yBAAyB,CAAC,KAAc;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;SACgB,uCAAuC,CAAC,KAAc,EAAE,OAAe;IACrF,IAAM,UAAU,GAAG,CAAC,CAAC;IACrB,IAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAE3C,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,IAAI,SAAS,CAAI,OAAO,4BAAyB,CAAC,CAAC;KAC1D;IAED,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,UAAU,EAAE;QACpC,MAAM,IAAI,SAAS,CAAI,OAAO,0CAAqC,UAAU,YAAO,UAAU,gBAAa,CAAC,CAAC;KAC9G;IAED,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACjC,OAAO,CAAC,CAAC;KACV;;;;;IAOD,OAAO,CAAC,CAAC;AACX;;SC3FgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;IAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAI,OAAO,8BAA2B,CAAC,CAAC;KAC5D;AACH;;ACsBA;SAEgB,kCAAkC,CAAI,MAAsB;IAC1E,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;SAEgB,4BAA4B,CAAI,MAAyB,EACzB,WAA2B;IAIxE,MAAM,CAAC,OAA2C,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtF,CAAC;SAEe,gCAAgC,CAAI,MAAyB,EAAE,KAAoB,EAAE,IAAa;IAChH,IAAM,MAAM,GAAG,MAAM,CAAC,OAAyC,CAEvB;IAExC,IAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAG,CAAC;IAClD,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,WAAW,EAAE,CAAC;KAC3B;SAAM;QACL,WAAW,CAAC,WAAW,CAAC,KAAM,CAAC,CAAC;KACjC;AACH,CAAC;SAEe,gCAAgC,CAAI,MAAyB;IAC3E,OAAQ,MAAM,CAAC,OAA0C,CAAC,aAAa,CAAC,MAAM,CAAC;AACjF,CAAC;SAEe,8BAA8B,CAAC,MAAsB;IACnE,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE;QAC1C,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;IAiBE,qCAAY,MAAyB;QACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KACxC;IAMD,sBAAI,+CAAM;;;;;aAAV;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;aACxE;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;;;;IAKD,4CAAM,GAAN,UAAO,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC5B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACxD;;;;;;IAOD,0CAAI,GAAJ;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAC;SACtE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,cAAqE,CAAC;QAC1E,IAAI,aAAqC,CAAC;QAC1C,IAAM,OAAO,GAAG,UAAU,CAAqC,UAAC,OAAO,EAAE,MAAM;YAC7E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAA;YACnE,WAAW,EAAE,cAAM,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAA;YACnE,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,aAAa,CAAC,CAAC,CAAC,GAAA;SACnC,CAAC;QACF,+BAA+B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC;KAChB;;;;;;;;;;IAWD,iDAAW,GAAX;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;SAC5G;QAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IACH,kCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;IAC7D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC/E,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,6BAA6B,CAAU,CAAM;IAC3D,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;AAClD,CAAC;SAEe,+BAA+B,CAAI,MAAsC,EACtC,WAA2B;IAC5E,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,WAAW,CAAC,WAAW,EAAE,CAAC;KAC3B;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QACtC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC9C;SAAM;QAEL,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,WAA+B,CAAC,CAAC;KAC9E;AACH,CAAC;AAED;AAEA,SAAS,gCAAgC,CAAC,IAAY;IACpD,OAAO,IAAI,SAAS,CAClB,2CAAyC,IAAI,uDAAoD,CAAC,CAAC;AACvG;;ACvPA;;AAEO,IAAI,sBAAsD,CAAC;AAElE,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;;;IAG5C,sBAAsB;;;QAGpB,GAACA,cAAM,CAAC,aAAa,IAArB;YACE,OAAO,IAAI,CAAC;SACb;WACF,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAEA,cAAM,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;;;ACd7F;AAqCA;IAME,yCAAY,MAAsC,EAAE,aAAsB;QAHlE,oBAAe,GAA4D,SAAS,CAAC;QACrF,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;KACrC;IAED,8CAAI,GAAJ;QAAA,iBAMC;QALC,IAAM,SAAS,GAAG,cAAM,OAAA,KAAI,CAAC,UAAU,EAAE,GAAA,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;YACzC,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;YAChE,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAED,gDAAM,GAAN,UAAO,KAAU;QAAjB,iBAKC;QAJC,IAAM,WAAW,GAAG,cAAM,OAAA,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAA,CAAC;QACnD,OAAO,IAAI,CAAC,eAAe;YACzB,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC;YACpE,WAAW,EAAE,CAAC;KACjB;IAEO,oDAAU,GAAlB;QAAA,iBAsCC;QArCC,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;SAC5D;QAED,IAAI,cAAqE,CAAC;QAC1E,IAAI,aAAqC,CAAC;QAC1C,IAAM,OAAO,GAAG,UAAU,CAAqC,UAAC,OAAO,EAAE,MAAM;YAC7E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,UAAA,KAAK;gBAChB,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC;;;gBAGjC,cAAc,CAAC,cAAM,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAA,CAAC,CAAC;aACrE;YACD,WAAW,EAAE;gBACX,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD;YACD,WAAW,EAAE,UAAA,MAAM;gBACjB,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,aAAa,CAAC,MAAM,CAAC,CAAC;aACvB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;KAChB;IAEO,sDAAY,GAApB,UAAqB,KAAU;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;SAG5B;QAE1C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAChE,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,oBAAoB,CAAC,MAAM,EAAE,cAAM,QAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAC,CAAC,CAAC;SACpE;QAED,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,mBAAmB,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACnD;IACH,sCAAC;AAAD,CAAC,IAAA;AAWD,IAAM,oCAAoC,GAA6C;IACrF,IAAI,EAAJ;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC,CAAC;SAC5E;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KACvC;IAED,MAAM,EAAN,UAAuD,KAAU;QAC/D,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC9E;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9C;CACK,CAAC;AACT,IAAI,sBAAsB,KAAK,SAAS,EAAE;IACxC,MAAM,CAAC,cAAc,CAAC,oCAAoC,EAAE,sBAAsB,CAAC,CAAC;CACrF;AAED;SAEgB,kCAAkC,CAAI,MAAyB,EACzB,aAAsB;IAC1E,IAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAC7D,IAAM,IAAI,GAAG,IAAI,+BAA+B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxE,IAAM,QAAQ,GAA2C,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC7G,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAU,CAAM;IACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IAED,IAAI;;QAEF,OAAQ,CAA8C,CAAC,kBAAkB;YACvE,+BAA+B,CAAC;KACnC;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED;AAEA,SAAS,sCAAsC,CAAC,IAAY;IAC1D,OAAO,IAAI,SAAS,CAAC,iCAA+B,IAAI,sDAAmD,CAAC,CAAC;AAC/G;;AC5LA;AAEA;AACA,IAAM,WAAW,GAAwB,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;;IAElE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;;SCNe,mBAAmB,CAAkB,QAAW;;;IAG9D,OAAO,QAAQ,CAAC,KAAK,EAAO,CAAC;AAC/B,CAAC;SAEe,kBAAkB,CAAC,IAAiB,EACjB,UAAkB,EAClB,GAAgB,EAChB,SAAiB,EACjB,CAAS;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED;SACgB,mBAAmB,CAA4B,CAAI;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAQD;AACA;SACgB,gBAAgB,CAAC,CAAkB;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,gBAAgB,CAAC,MAAuB,EAAE,KAAa,EAAE,GAAW;;;IAGlF,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACjC;IACD,IAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;IAC3B,IAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf;;SCtCgB,mBAAmB,CAAC,CAAS;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,iBAAiB,CAAC,CAAkB;IAClD,IAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACrF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC;;SCRgB,YAAY,CAAI,SAAuC;IAIrE,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC;IACvC,IAAI,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE;QACjC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;KAC/B;IAED,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;SAEe,oBAAoB,CAAI,SAAuC,EAAE,KAAQ,EAAE,IAAY;IAGrG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE;QACnD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;KAC9E;IAED,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC;AACpC,CAAC;SAEe,cAAc,CAAI,SAAuC;IAIvE,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;SAEe,UAAU,CAAI,SAA4B;IAGxD,SAAS,CAAC,MAAM,GAAG,IAAI,WAAW,EAAK,CAAC;IACxC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;AAChC;;ACdA;;;;;;IAWE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAKD,sBAAI,2CAAI;;;;aAAR;YACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;aAC9C;YAED,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;OAAA;IAUD,2CAAO,GAAP,UAAQ,YAAgC;QACtC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,SAAS,CAAC,CAAC;SACjD;QACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,YAAY,GAAG,uCAAuC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;YAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;SAC/D;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAM,CAAC,EAAE,CAKA;QAE1C,mCAAmC,CAAC,IAAI,CAAC,uCAAuC,EAAE,YAAY,CAAC,CAAC;KACjG;IAUD,sDAAkB,GAAlB,UAAmB,IAAiC;QAClD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;SAC5D;QACD,sBAAsB,CAAC,IAAI,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;YAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;SAC/D;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;QAED,8CAA8C,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;KACpG;IACH,gCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;IAC3D,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACxC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC7E,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAyCD;;;;;;IAiCE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAKD,sBAAI,qDAAW;;;;aAAf;YACE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;aAC9D;YAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;SACzD;;;OAAA;IAMD,sBAAI,qDAAW;;;;;aAAf;YACE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;aAC9D;YAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;SACzD;;;OAAA;;;;;IAMD,4CAAK,GAAL;QACE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;SACnF;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,oBAAkB,KAAK,8DAA2D,CAAC,CAAC;SACzG;QAED,iCAAiC,CAAC,IAAI,CAAC,CAAC;KACzC;IAOD,8CAAO,GAAP,UAAQ,KAAkC;QACxC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,SAAS,CAAC,CAAC;SAC1D;QAED,sBAAsB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;SAC3D;QACD,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;SAC5D;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;SACrD;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,oBAAkB,KAAK,mEAAgE,CAAC,CAAC;SAC9G;QAED,mCAAmC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAClD;;;;IAKD,4CAAK,GAAL,UAAM,CAAkB;QAAlB,kBAAA,EAAA,aAAkB;QACtB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,iCAAiC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC5C;;IAGD,uCAAC,WAAW,CAAC,GAAb,UAAc,MAAW;QACvB,iDAAiD,CAAC,IAAI,CAAC,CAAC;QAExD,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,2CAA2C,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;KACf;;IAGD,uCAAC,SAAS,CAAC,GAAX,UAAY,WAAoC;QAC9C,IAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,CACF;QAE/C,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YAG5B,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;YACnC,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;YAEzC,4CAA4C,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAE9E,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;SACR;QAED,IAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC1D,IAAI,qBAAqB,KAAK,SAAS,EAAE;YACvC,IAAI,MAAM,SAAa,CAAC;YACxB,IAAI;gBACF,MAAM,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;aACjD;YAAC,OAAO,OAAO,EAAE;gBAChB,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO;aACR;YAED,IAAM,kBAAkB,GAA8B;gBACpD,MAAM,QAAA;gBACN,gBAAgB,EAAE,qBAAqB;gBACvC,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,qBAAqB;gBACjC,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,eAAe,EAAE,UAAU;gBAC3B,UAAU,EAAE,SAAS;aACtB,CAAC;YAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACjD;QAED,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,4CAA4C,CAAC,IAAI,CAAC,CAAC;KACpD;IACH,mCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,SAAS,EAAE;IAC9D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAChF,KAAK,EAAE,8BAA8B;QACrC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,8BAA8B,CAAC,CAAM;IACnD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,EAAE;QAC7E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,4BAA4B,CAAC;AACnD,CAAC;AAED,SAAS,2BAA2B,CAAC,CAAM;IACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;QACvF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;AAChD,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAwC;IAC5F,IAAM,UAAU,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO;KAGsB;IAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;;IAG3B,IAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAChD,WAAW,CACT,WAAW,EACX;QACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,4CAA4C,CAAC,UAAU,CAAC,CAAC;SAC1D;KACF,EACD,UAAA,CAAC;QACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KAClD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iDAAiD,CAAC,UAAwC;IACjG,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAC9D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,oDAAoD,CAC3D,MAA0B,EAC1B,kBAAyC;IAIzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAE9B,IAAI,GAAG,IAAI,CAAC;KACb;IAED,IAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;IAChG,IAAI,kBAAkB,CAAC,UAAU,KAAK,SAAS,EAAE;QAC/C,gCAAgC,CAAC,MAAM,EAAE,UAAmC,EAAE,IAAI,CAAC,CAAC;KACrF;SAAM;QAEL,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,qDAAqD,CAC5D,kBAAyC;IAEzC,IAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACnD,IAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAGV;IAExC,OAAO,IAAI,kBAAkB,CAAC,eAAe,CAC3C,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAM,CAAC;AAC9F,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAwC,EACxC,MAAuB,EACvB,UAAkB,EAClB,UAAkB;IACzE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,QAAA,EAAE,UAAU,YAAA,EAAE,UAAU,YAAA,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC;AAC3C,CAAC;AAED,SAAS,2DAA2D,CAAC,UAAwC,EACxC,kBAAsC;IACzG,IAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IAEnD,IAAM,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;IAE1G,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAC1B,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChG,IAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,GAAG,cAAc,CAAC;IACvE,IAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC;IAEtE,IAAI,yBAAyB,GAAG,cAAc,CAAC;IAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,eAAe,GAAG,mBAAmB,EAAE;QACzC,yBAAyB,GAAG,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAC7E,KAAK,GAAG,IAAI,CAAC;KACd;IAED,IAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;IAEhC,OAAO,yBAAyB,GAAG,CAAC,EAAE;QACpC,IAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;QAEhF,IAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;QACjF,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAElH,IAAI,WAAW,CAAC,UAAU,KAAK,WAAW,EAAE;YAC1C,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;aAAM;YACL,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;YACtC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;SACvC;QACD,UAAU,CAAC,eAAe,IAAI,WAAW,CAAC;QAE1C,sDAAsD,CAAC,UAAU,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAEpG,yBAAyB,IAAI,WAAW,CAAC;KAC1C;IAQD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sDAAsD,CAAC,UAAwC,EACxC,IAAY,EACZ,kBAAsC;IAGpG,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAwC;IAG5F,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE;QAClE,2CAA2C,CAAC,UAAU,CAAC,CAAC;QACxD,mBAAmB,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;KAC/D;SAAM;QACL,4CAA4C,CAAC,UAAU,CAAC,CAAC;KAC1D;AACH,CAAC;AAED,SAAS,iDAAiD,CAAC,UAAwC;IACjG,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE;QACpC,OAAO;KACR;IAED,UAAU,CAAC,YAAY,CAAC,uCAAuC,GAAG,SAAU,CAAC;IAC7E,UAAU,CAAC,YAAY,CAAC,KAAK,GAAG,IAAK,CAAC;IACtC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,gEAAgE,CAAC,UAAwC;IAGhH,OAAO,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9C,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,EAAE;YACpC,OAAO;SACR;QAED,IAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAE/D,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;YAC/F,gDAAgD,CAAC,UAAU,CAAC,CAAC;YAE7D,oDAAoD,CAClD,UAAU,CAAC,6BAA6B,EACxC,kBAAkB,CACnB,CAAC;SACH;KACF;AACH,CAAC;SAEe,oCAAoC,CAClD,UAAwC,EACxC,IAAO,EACP,eAAmC;IAEnC,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;QACjC,WAAW,GAAI,IAAI,CAAC,WAA6C,CAAC,iBAAiB,CAAC;KACrF;IAED,IAAM,IAAI,GAAG,IAAI,CAAC,WAA4C,CAAC;;IAG/D,IAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;;;IAMhD,IAAM,kBAAkB,GAA8B;QACpD,MAAM,QAAA;QACN,gBAAgB,EAAE,MAAM,CAAC,UAAU;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,CAAC;QACd,WAAW,aAAA;QACX,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,MAAM;KACnB,CAAC;IAEF,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;;;;QAMtD,gCAAgC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,IAAM,SAAS,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACxF,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;QAClC,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;YAC/F,IAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;YAEhG,4CAA4C,CAAC,UAAU,CAAC,CAAC;YAEzD,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO;SACR;QAED,IAAI,UAAU,CAAC,eAAe,EAAE;YAC9B,IAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;YACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEjD,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO;SACR;KACF;IAED,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEtD,gCAAgC,CAAI,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7D,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gDAAgD,CAAC,UAAwC,EACxC,eAAmC;IAG3F,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IACxD,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;QACvC,OAAO,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACvD,IAAM,kBAAkB,GAAG,gDAAgD,CAAC,UAAU,CAAC,CAAC;YACxF,oDAAoD,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;SAClF;KACF;AACH,CAAC;AAED,SAAS,kDAAkD,CAAC,UAAwC,EACxC,YAAoB,EACpB,kBAAsC;IAGhG,sDAAsD,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAErG,IAAI,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,EAAE;QACnE,OAAO;KACR;IAED,gDAAgD,CAAC,UAAU,CAAC,CAAC;IAE7D,IAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACtF,IAAI,aAAa,GAAG,CAAC,EAAE;QACrB,IAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAC3E,IAAM,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC;QACxF,+CAA+C,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;KACjG;IAED,kBAAkB,CAAC,WAAW,IAAI,aAAa,CAAC;IAChD,oDAAoD,CAAC,UAAU,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;IAEnH,gEAAgE,CAAC,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAwC,EAAE,YAAoB;IACjH,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CACJ;IAEvD,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QAEtB,gDAAgD,CAAC,UAA2B,CAAC,CAAC;KAC/E;SAAM;QAGL,kDAAkD,CAAC,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;KAC/F;IAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gDAAgD,CACvD,UAAwC;IAGxC,IAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;IACzD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,0CAA0C,CAAC,UAAwC;IAC1F,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,IAAI,UAAU,CAAC,eAAe,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,8BAA8B,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC1F,OAAO,IAAI,CAAC;KACb;IAED,IAAI,2BAA2B,CAAC,MAAM,CAAC,IAAI,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC3F,OAAO,IAAI,CAAC;KACb;IAED,IAAM,WAAW,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAC7C;IAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAwC;IAC3F,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;IACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED;SAEgB,iCAAiC,CAAC,UAAwC;IACxF,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,OAAO;KACR;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;QAClC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QAElC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,IAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,oBAAoB,CAAC,WAAW,GAAG,CAAC,EAAE;YACxC,IAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;YACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEjD,MAAM,CAAC,CAAC;SACT;KACF;IAED,2CAA2C,CAAC,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;SAEe,mCAAmC,CAAC,UAAwC,EAAE,KAAsB;IAClH,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,OAAO;KACR;IAED,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IAIpC,IAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,IAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAIlD;QACD,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;KAChF;IAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,8BAA8B,CAAC,MAAM,CAAC,EAAE;QAC1C,IAAI,gCAAgC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAElD,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACxG;aAAM;YAEL,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAE3C,gDAAgD,CAAC,UAAU,CAAC,CAAC;aAC9D;YACD,IAAM,eAAe,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAClF,gCAAgC,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;SAClE;KACF;SAAM,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;;QAE9C,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACvG,gEAAgE,CAAC,UAAU,CAAC,CAAC;KAC9E;SAAM;QAEL,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACxG;IAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;SAEe,iCAAiC,CAAC,UAAwC,EAAE,CAAM;IAChG,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO;KACR;IAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,2CAA2C,CAAC,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;SAEe,0CAA0C,CACxD,UAAwC;IAExC,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/E,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,EACxD,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAEtF,IAAM,WAAW,GAA8B,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAClG,8BAA8B,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9D,UAAU,CAAC,YAAY,GAAG,WAAW,CAAC;KACvC;IACD,OAAO,UAAU,CAAC,YAAY,CAAC;AACjC,CAAC;AAED,SAAS,0CAA0C,CAAC,UAAwC;IAC1F,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;SAEe,mCAAmC,CAAC,UAAwC,EAAE,YAAoB;IAGhH,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,kEAAkE,CAAC,CAAC;SACzF;KACF;SAAM;QAEL,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;SACxG;QACD,IAAI,eAAe,CAAC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE;YAC3E,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;SACnD;KACF;IAED,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAErE,2CAA2C,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACxE,CAAC;SAEe,8CAA8C,CAAC,UAAwC,EACxC,IAAqB;IAIlF,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CAAC,mFAAmF,CAAC,CAAC;SAC1G;KACF;SAAM;QAEL,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CACjB,kGAAkG,CACnG,CAAC;SACH;KACF;IAED,IAAI,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU,EAAE;QAChF,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;KACjF;IACD,IAAI,eAAe,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QAC/D,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;KACpF;IACD,IAAI,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE;QAC9E,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;KACjF;IAED,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IACvC,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,2CAA2C,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC1E,CAAC;SAEe,iCAAiC,CAAC,MAA0B,EAC1B,UAAwC,EACxC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,qBAAyC;IAOzF,UAAU,CAAC,6BAA6B,GAAG,MAAM,CAAC;IAElD,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;;IAG/B,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IAC5D,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;IAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAE9C,UAAU,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;IAE1D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjD,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;IAE9C,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;QACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;QAE/B,4CAA4C,CAAC,UAAU,CAAC,CAAC;KAC1D,EACD,UAAA,CAAC;QACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KAClD,CACF,CAAC;AACJ,CAAC;SAEe,qDAAqD,CACnE,MAA0B,EAC1B,oBAAmD,EACnD,aAAqB;IAErB,IAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAEvG,IAAI,cAAc,GAAmC,cAAM,OAAA,SAAS,GAAA,CAAC;IACrE,IAAI,aAAa,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAC9E,IAAI,eAAe,GAAmC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE3F,IAAI,oBAAoB,CAAC,KAAK,KAAK,SAAS,EAAE;QAC5C,cAAc,GAAG,cAAM,OAAA,oBAAoB,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KAChE;IACD,IAAI,oBAAoB,CAAC,IAAI,KAAK,SAAS,EAAE;QAC3C,aAAa,GAAG,cAAM,OAAA,oBAAoB,CAAC,IAAK,CAAC,UAAU,CAAC,GAAA,CAAC;KAC9D;IACD,IAAI,oBAAoB,CAAC,MAAM,KAAK,SAAS,EAAE;QAC7C,eAAe,GAAG,UAAA,MAAM,IAAI,OAAA,oBAAoB,CAAC,MAAO,CAAC,MAAM,CAAC,GAAA,CAAC;KAClE;IAED,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;IACzE,IAAI,qBAAqB,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;KACrE;IAED,iCAAiC,CAC/B,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,CACzG,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAkC,EAClC,UAAwC,EACxC,IAAqB;IAK3D,OAAO,CAAC,uCAAuC,GAAG,UAAU,CAAC;IAC7D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;AAEA,SAAS,8BAA8B,CAAC,IAAY;IAClD,OAAO,IAAI,SAAS,CAClB,yCAAuC,IAAI,qDAAkD,CAAC,CAAC;AACnG,CAAC;AAED;AAEA,SAAS,uCAAuC,CAAC,IAAY;IAC3D,OAAO,IAAI,SAAS,CAClB,4CAA0C,IAAI,wDAAqD,CAAC,CAAC;AACzG;;ACv/BA;SAEgB,+BAA+B,CAAC,MAA0B;IACxE,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;SAEgB,gCAAgC,CAA4B,MAA0B,EAC1B,eAAmC;IAI5G,MAAM,CAAC,OAAqC,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxF,CAAC;SAEe,oCAAoC,CAAC,MAA0B,EAC1B,KAAsB,EACtB,IAAa;IAChE,IAAM,MAAM,GAAG,MAAM,CAAC,OAAmC,CAEb;IAE5C,IAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;IAC1D,IAAI,IAAI,EAAE;QACR,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpC;SAAM;QACL,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpC;AACH,CAAC;SAEe,oCAAoC,CAAC,MAA0B;IAC7E,OAAQ,MAAM,CAAC,OAAoC,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC/E,CAAC;SAEe,2BAA2B,CAAC,MAA0B;IACpE,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE;QACvC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;IAiBE,kCAAY,MAA0B;QACpC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAC9D,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;YACrE,MAAM,IAAI,SAAS,CAAC,uFAAuF;gBACzG,QAAQ,CAAC,CAAC;SACb;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC5C;IAMD,sBAAI,4CAAM;;;;;aAAV;YACE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;gBACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;aACrE;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;;;;IAKD,yCAAM,GAAN,UAAO,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC5B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACxD;;;;;;IAOD,uCAAI,GAAJ,UAAgC,IAAO;QACrC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;SAChF;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC,CAAC;SACjF;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC,CAAC;SAC1F;QACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,cAAkE,CAAC;QACvE,IAAI,aAAqC,CAAC;QAC1C,IAAM,OAAO,GAAG,UAAU,CAAkC,UAAC,OAAO,EAAE,MAAM;YAC1E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,eAAe,GAAuB;YAC1C,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAA;YACnE,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAA;YAClE,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,aAAa,CAAC,CAAC,CAAC,GAAA;SACnC,CAAC;QACF,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;KAChB;;;;;;;;;;IAWD,8CAAW,GAAX;QACE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,6BAA6B,CAAC,aAAa,CAAC,CAAC;SACpD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;SAC5G;QAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IACH,+BAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,SAAS,EAAE;IAC1D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC5E,KAAK,EAAE,0BAA0B;QACjC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,0BAA0B,CAAC,CAAM;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,wBAAwB,CAAC;AAC/C,CAAC;SAEe,4BAA4B,CAC1C,MAAgC,EAChC,IAAO,EACP,eAAmC;IAEnC,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC/B,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAClD;SAAM;QACL,oCAAoC,CAClC,MAAM,CAAC,yBAAyD,EAChE,IAAI,EACJ,eAAe,CAChB,CAAC;KACH;AACH,CAAC;AAED;AAEA,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,IAAI,SAAS,CAClB,wCAAsC,IAAI,oDAAiD,CAAC,CAAC;AACjG;;SCjRgB,oBAAoB,CAAC,QAAyB,EAAE,UAAkB;IACxE,IAAA,aAAa,GAAK,QAAQ,cAAb,CAAc;IAEnC,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO,UAAU,CAAC;KACnB;IAED,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;QACnD,MAAM,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC/C;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;SAEe,oBAAoB,CAAI,QAA4B;IAC1D,IAAA,IAAI,GAAK,QAAQ,KAAb,CAAc;IAE1B,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,cAAM,OAAA,CAAC,GAAA,CAAC;KAChB;IAED,OAAO,IAAI,CAAC;AACd;;SCtBgB,sBAAsB,CAAI,IAA2C,EAC3C,OAAe;IACvD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,IAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;IAC1C,IAAM,IAAI,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;IACxB,OAAO;QACL,aAAa,EAAE,aAAa,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACjG,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,0BAA0B,CAAC,IAAI,EAAK,OAAO,4BAAyB,CAAC;KAC7G,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAI,EAAkC,EAClC,OAAe;IACpD,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAA,KAAK,IAAI,OAAA,yBAAyB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAA,CAAC;AACvD;;SCNgB,qBAAqB,CAAI,QAAkC,EAClC,OAAe;IACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,IAAI,MAAA;KACL,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,MAAW,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,GAAA,CAAC;AAC9D,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,cAAM,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAA,CAAC;AAC7C,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAA2C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AAClG,CAAC;AAED,SAAS,kCAAkC,CACzC,EAAkC,EAClC,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,KAAQ,EAAE,UAA2C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,GAAA,CAAC;AACnH;;SCrEgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;IAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAI,OAAO,8BAA2B,CAAC,CAAC;KAC5D;AACH;;SCsBgB,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;QAC/C,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,OAAO,OAAQ,KAAqB,CAAC,OAAO,KAAK,SAAS,CAAC;KAC5D;IAAC,WAAM;;QAEN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAsBD,IAAM,uBAAuB,GAAG,OAAQ,eAAuB,KAAK,UAAU,CAAC;AAE/E;;;;;SAKgB,qBAAqB;IACnC,IAAI,uBAAuB,EAAE;QAC3B,OAAO,IAAK,eAA8C,EAAE,CAAC;KAC9D;IACD,OAAO,SAAS,CAAC;AACnB;;ACnBA;;;;;;IA4BE,wBAAY,iBAA4D,EAC5D,WAAuD;QADvD,kCAAA,EAAA,sBAA4D;QAC5D,4BAAA,EAAA,gBAAuD;QACjE,IAAI,iBAAiB,KAAK,SAAS,EAAE;YACnC,iBAAiB,GAAG,IAAI,CAAC;SAC1B;aAAM;YACL,YAAY,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;SACpD;QAED,IAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAM,cAAc,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAEnF,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;SACnD;QAED,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAExD,sDAAsD,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;KAC5G;IAKD,sBAAI,kCAAM;;;;aAAV;YACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMC,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;;;OAAA;;;;;;;;;;IAWD,8BAAK,GAAL,UAAM,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;SAC9F;QAED,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC1C;;;;;;;;;IAUD,8BAAK,GAAL;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;SAC9F;QAED,IAAI,mCAAmC,CAAC,IAAI,CAAC,EAAE;YAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;SACrF;QAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAClC;;;;;;;;;IAUD,kCAAS,GAAT;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;SAC9C;QAED,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;KACjD;IACH,qBAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;IAChD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAClE,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAqBD;AAEA,SAAS,kCAAkC,CAAI,MAAyB;IACtE,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;AACA,SAAS,oBAAoB,CAAI,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAiB,EACjB,aAAuD;IADvD,8BAAA,EAAA,iBAAiB;IACjB,8BAAA,EAAA,8BAAsD,OAAA,CAAC,GAAA,GAC3C;IAE3C,IAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAEhH,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAClE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAI,MAAyB;IAC5D,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;;;IAI3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAEhC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;;;IAI3B,MAAM,CAAC,yBAAyB,GAAG,SAAU,CAAC;;;IAI9C,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;;;IAI1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;;IAIzC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;;;IAIjC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;IAGzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;;IAGxC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU;IAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,cAAc,CAAC;AACrC,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAsB;IAGpD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAsB,EAAE,MAAW;;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC7D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,MAAM,CAAC,yBAAyB,CAAC,YAAY,GAAG,MAAM,CAAC;IACvD,MAAA,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,0CAAE,KAAK,EAAE,CAAC;;;;IAK3D,IAAM,KAAK,GAAG,MAAM,CAAC,MAA6B,CAAC;IAEnD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;QAC7C,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,OAAO,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC;KAGO;IAErD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,kBAAkB,GAAG,IAAI,CAAC;;QAE1B,MAAM,GAAG,SAAS,CAAC;KACpB;IAED,IAAM,OAAO,GAAG,UAAU,CAAY,UAAC,OAAO,EAAE,MAAM;QACpD,MAAM,CAAC,oBAAoB,GAAG;YAC5B,QAAQ,EAAE,SAAU;YACpB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;YACf,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;KACH,CAAC,CAAC;IACH,MAAM,CAAC,oBAAqB,CAAC,QAAQ,GAAG,OAAO,CAAC;IAEhD,IAAI,CAAC,kBAAkB,EAAE;QACvB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA2B;IACtD,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;QAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CACtC,oBAAkB,KAAK,8DAA2D,CAAC,CAAC,CAAC;KAIpC;IAErD,IAAM,OAAO,GAAG,UAAU,CAAY,UAAC,OAAO,EAAE,MAAM;QACpD,IAAM,YAAY,GAAiB;YACjC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;KACrC,CAAC,CAAC;IAEH,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,KAAK,UAAU,EAAE;QACxE,gCAAgC,CAAC,MAAM,CAAC,CAAC;KAC1C;IAED,oCAAoC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAEvE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;AAEA,SAAS,6BAA6B,CAAC,MAAsB;IAI3D,IAAM,OAAO,GAAG,UAAU,CAAY,UAAC,OAAO,EAAE,MAAM;QACpD,IAAM,YAAY,GAAiB;YACjC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC1C,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,+BAA+B,CAAC,MAAsB,EAAE,KAAU;IACzE,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;KAGoB;IAC7B,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAsB,EAAE,MAAW;IAItE,IAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAClB;IAEjC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,qDAAqD,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvE;IAED,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE;QAC5E,4BAA4B,CAAC,MAAM,CAAC,CAAC;KACtC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAsB;IAG1D,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAAC;IAE/C,IAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,YAAY;QACxC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;IAE1C,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,iDAAiD,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACjD,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAExC,IAAI,YAAY,CAAC,mBAAmB,EAAE;QACpC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClC,iDAAiD,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAM,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACnF,WAAW,CACT,OAAO,EACP;QACE,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxB,iDAAiD,CAAC,MAAM,CAAC,CAAC;KAC3D,EACD,UAAC,MAAW;QACV,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,iDAAiD,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC,CAAC;AACP,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;AAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;IAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;IAErE,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAEzC,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAE0B;IAErD,IAAI,KAAK,KAAK,UAAU,EAAE;;QAExB,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACzC;KACF;IAED,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEzB,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,iCAAiC,CAAC,MAAM,CAAC,CAAC;KAIF;AAC5C,CAAC;AAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;IAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;;IAGrE,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;KACzC;IACD,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED;AACA,SAAS,mCAAmC,CAAC,MAAsB;IACjE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QACpF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAsB;IACtE,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC5F,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sCAAsC,CAAC,MAAsB;IAGpE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;IACpD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;AACnC,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAsB;IAGzE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,iDAAiD,CAAC,MAAsB;IAE/E,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;QAGtC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;KAClC;IACD,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;KAC/D;AACH,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAsB,EAAE,YAAqB;IAIrF,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;QACjE,IAAI,YAAY,EAAE;YAChB,8BAA8B,CAAC,MAAM,CAAC,CAAC;SACxC;aAAM;YAGL,gCAAgC,CAAC,MAAM,CAAC,CAAC;SAC1C;KACF;IAED,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,CAAC;AAED;;;;;;IAyBE,qCAAY,MAAyB;QACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACnC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtB,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE;gBACxE,mCAAmC,CAAC,IAAI,CAAC,CAAC;aAC3C;iBAAM;gBACL,6CAA6C,CAAC,IAAI,CAAC,CAAC;aACrD;YAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;aAAM,IAAI,KAAK,KAAK,UAAU,EAAE;YAC/B,6CAA6C,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACzE,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;YAC7B,6CAA6C,CAAC,IAAI,CAAC,CAAC;YACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;SACtD;aAAM;YAGL,IAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,6CAA6C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACjE,8CAA8C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SACnE;KACF;IAMD,sBAAI,+CAAM;;;;;aAAV;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;aACxE;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;IAUD,sBAAI,oDAAW;;;;;;;;;aAAf;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;aACvD;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,MAAM,0BAA0B,CAAC,aAAa,CAAC,CAAC;aACjD;YAED,OAAO,yCAAyC,CAAC,IAAI,CAAC,CAAC;SACxD;;;OAAA;IAUD,sBAAI,8CAAK;;;;;;;;;aAAT;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;aACvE;YAED,OAAO,IAAI,CAAC,aAAa,CAAC;SAC3B;;;OAAA;;;;IAKD,2CAAK,GAAL,UAAM,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC3B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACjE;QAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACvD;;;;IAKD,2CAAK,GAAL;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,mCAAmC,CAAC,MAAM,CAAC,EAAE;YAC/C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;SACrF;QAED,OAAO,gCAAgC,CAAC,IAAI,CAAC,CAAC;KAC/C;;;;;;;;;;;IAYD,iDAAW,GAAX;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO;SAG4B;QAErC,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IAYD,2CAAK,GAAL,UAAM,KAAqB;QAArB,sBAAA,EAAA,QAAW,SAAU;QACzB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;SACpE;QAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtD;IACH,kCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;IAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC/E,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,6BAA6B,CAAU,CAAM;IACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE;QACpE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;AAClD,CAAC;AAED;AAEA,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;IACxF,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC;IAC3E,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,oDAAoD,CAAC,MAAmC;IAC/F,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;QACrE,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAGG;IAErD,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,sDAAsD,CAAC,MAAmC,EAAE,KAAU;IAC7G,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE;QAC5C,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACjD;SAAM;QACL,yCAAyC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC1D;AACH,CAAC;AAED,SAAS,qDAAqD,CAAC,MAAmC,EAAE,KAAU;IAC5G,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE;QAC3C,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAChD;SAAM;QACL,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,CAAC;AAED,SAAS,yCAAyC,CAAC,MAAmC;IACpF,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAC3C,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,6CAA6C,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAmC;IAC7E,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAER;IAElC,IAAM,aAAa,GAAG,IAAI,SAAS,CACjC,kFAAkF,CAAC,CAAC;IAEtF,qDAAqD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;;;IAI7E,sDAAsD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE9E,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED,SAAS,gCAAgC,CAAI,MAAsC,EAAE,KAAQ;IAC3F,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,IAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAEpD,IAAM,SAAS,GAAG,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAEjF,IAAI,MAAM,KAAK,MAAM,CAAC,oBAAoB,EAAE;QAC1C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;KACpE;IAED,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjD;IACD,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;QACrE,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;KACvG;IACD,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAGrB;IAE7B,IAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtD,oCAAoC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,IAAM,aAAa,GAAkB,EAAS,CAAC;AAI/C;;;;;;IA6BE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IASD,sBAAI,wDAAW;;;;;;;;aAAf;YACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAME,sCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YACD,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;OAAA;IAKD,sBAAI,mDAAM;;;;aAAV;YACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMA,sCAAoC,CAAC,QAAQ,CAAC,CAAC;aACtD;YACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;;;;gBAIvC,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;aAC1F;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;SACrC;;;OAAA;;;;;;;;IASD,+CAAK,GAAL,UAAM,CAAkB;QAAlB,kBAAA,EAAA,aAAkB;QACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QACpD,IAAI,KAAK,KAAK,UAAU,EAAE;;;YAGxB,OAAO;SACR;QAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC/C;;IAGD,0CAAC,UAAU,CAAC,GAAZ,UAAa,MAAW;QACtB,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,8CAA8C,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;;IAGD,0CAAC,UAAU,CAAC,GAAZ;QACE,UAAU,CAAC,IAAI,CAAC,CAAC;KAClB;IACH,sCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;IACjE,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,iCAAiC;QACxC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,iCAAiC,CAAC,CAAM;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAqB,EACrB,aAA6C;IAI5F,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;;IAG9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;IAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;IACtD,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAE5C,IAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,IAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,WAAW,CACT,YAAY,EACZ;QAEE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,mDAAmD,CAAC,UAAU,CAAC,CAAC;KACjE,EACD,UAAA,CAAC;QAEC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC5C,CACF,CAAC;AACJ,CAAC;AAED,SAAS,sDAAsD,CAAI,MAAyB,EACzB,cAA0C,EAC1C,aAAqB,EACrB,aAA6C;IAC9G,IAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAE5E,IAAI,cAAc,GAAmC,cAAM,OAAA,SAAS,GAAA,CAAC;IACrE,IAAI,cAAc,GAAgC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IACvF,IAAI,cAAc,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAC/E,IAAI,cAAc,GAAmC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE1F,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,cAAM,OAAA,cAAc,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KAC1D;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,KAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAA,CAAC;KACpE;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,cAAM,OAAA,cAAc,CAAC,KAAM,EAAE,GAAA,CAAC;KAChD;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,UAAA,MAAM,IAAI,OAAA,cAAc,CAAC,KAAM,CAAC,MAAM,CAAC,GAAA,CAAC;KAC1D;IAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CACjH,CAAC;AACJ,CAAC;AAED;AACA,SAAS,8CAA8C,CAAC,UAAgD;IACtG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;AACjD,CAAC;AAED,SAAS,oCAAoC,CAAI,UAA8C;IAC7F,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IACnD,mDAAmD,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,2CAA2C,CAAI,UAA8C,EAC9C,KAAQ;IAC9D,IAAI;QACF,OAAO,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;KACjD;IAAC,OAAO,UAAU,EAAE;QACnB,4CAA4C,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;KACV;AACH,CAAC;AAED,SAAS,6CAA6C,CAAC,UAAgD;IACrG,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;AAED,SAAS,oCAAoC,CAAI,UAA8C,EAC9C,KAAQ,EACR,SAAiB;IAChE,IAAI;QACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;KACpD;IAAC,OAAO,QAAQ,EAAE;QACjB,4CAA4C,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE,OAAO;KACR;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IACpD,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChF,IAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACxD;IAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED;AAEA,SAAS,mDAAmD,CAAI,UAA8C;IAC5G,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO;KACR;IAED,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACuB;IAClD,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,OAAO;KACR;IAED,IAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,aAAa,EAAE;QAC3B,2CAA2C,CAAC,UAAU,CAAC,CAAC;KACzD;SAAM;QACL,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAgD,EAAE,KAAU;IAChH,IAAI,UAAU,CAAC,yBAAyB,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,oCAAoC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAgD;IACnG,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,sCAAsC,CAAC,MAAM,CAAC,CAAC;IAE/C,YAAY,CAAC,UAAU,CAAC,CACe;IAEvC,IAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IACtD,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,WAAW,CACT,gBAAgB,EAChB;QACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;KAC3C,EACD,UAAA,MAAM;QACJ,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,2CAA2C,CAAI,UAA8C,EAAE,KAAQ;IAC9G,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,2CAA2C,CAAC,MAAM,CAAC,CAAC;IAEpD,IAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,WAAW,CACT,gBAAgB,EAChB;QACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAC0B;QAErD,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE;YACxE,IAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;YAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SACxD;QAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;KACjE,EACD,UAAA,MAAM;QACJ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,8CAA8C,CAAC,UAAU,CAAC,CAAC;SAC5D;QACD,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,8CAA8C,CAAC,UAAgD;IACtG,IAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;IAC9E,OAAO,WAAW,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;AAEA,SAAS,oCAAoC,CAAC,UAAgD,EAAE,KAAU;IACxG,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAEd;IAErC,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;AAEA,SAASC,2BAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAAC,8BAA4B,IAAI,0CAAuC,CAAC,CAAC;AAChG,CAAC;AAED;AAEA,SAASC,sCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,+CAA6C,IAAI,2DAAwD,CAAC,CAAC;AAC/G,CAAC;AAGD;AAEA,SAAS,gCAAgC,CAAC,IAAY;IACpD,OAAO,IAAI,SAAS,CAClB,2CAAyC,IAAI,uDAAoD,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,oCAAoC,CAAC,MAAmC;IAC/E,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;QACtC,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,8CAA8C,CAAC,MAAmC,EAAE,MAAW;IACtG,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,8CAA8C,CAAC,MAAmC;IACzF,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;IACxF,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KAEwC;IAEjD,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,yCAAyC,CAAC,MAAmC,EAAE,MAAW;IAKjG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAmC;IAC5E,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;QAC/C,OAAO;KAEwC;IAEjD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,mCAAmC,CAAC,MAAmC;IAC9E,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QAChD,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC;QACvC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;KACtC,CAAC,CAAC;IACH,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;AACxC,CAAC;AAED,SAAS,6CAA6C,CAAC,MAAmC,EAAE,MAAW;IACrG,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,6CAA6C,CAAC,MAAmC;IACxF,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,+BAA+B,CAAC,MAAmC,EAAE,MAAW;IACvF,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,OAAO;KACR;IAED,yBAAyB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC;AACzC,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAmC;IAIzE,mCAAmC,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAmC,EAAE,MAAW;IAIhG,6CAA6C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC;IAC3E,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;AAC1C;;ACj4CA;AACO,IAAM,kBAAkB,GAC7B,OAAO,YAAY,KAAK,WAAW,GAAG,YAAY,GAAG,SAAS;;ACFhE;AAaA,SAAS,yBAAyB,CAAC,IAAa;IAC9C,IAAI,EAAE,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,IAAK,IAAgC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED,SAAS,0BAA0B;;IAEjC,IAAM,IAAI,GAAG,SAAS,YAAY,CAAqB,OAAgB,EAAE,IAAa;QACpF,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC;QAC5B,IAAI,KAAK,CAAC,iBAAiB,EAAE;YAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACjD;KACK,CAAC;IACT,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1G,OAAO,IAAI,CAAC;AACd,CAAC;AAED;AACA,IAAMC,cAAY,GAChB,yBAAyB,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,0BAA0B,EAAE;;SCbnF,oBAAoB,CAAI,MAAyB,EACzB,IAAuB,EACvB,YAAqB,EACrB,YAAqB,EACrB,aAAsB,EACtB,MAA+B;IAUrE,IAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAC7D,IAAM,MAAM,GAAG,kCAAkC,CAAI,IAAI,CAAC,CAAC;IAE3D,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,YAAY,GAAG,KAAK,CAAC;;IAGzB,IAAI,YAAY,GAAG,mBAAmB,CAAO,SAAS,CAAC,CAAC;IAExD,OAAO,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QAChC,IAAI,cAA0B,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,cAAc,GAAG;gBACf,IAAM,KAAK,GAAG,IAAIA,cAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACxD,IAAM,OAAO,GAA+B,EAAE,CAAC;gBAC/C,IAAI,CAAC,YAAY,EAAE;oBACjB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;4BAC9B,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;yBACzC;wBACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBACvC,CAAC,CAAC;iBACJ;gBACD,IAAI,CAAC,aAAa,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;4BAChC,OAAO,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;yBAC5C;wBACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBACvC,CAAC,CAAC;iBACJ;gBACD,kBAAkB,CAAC,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,EAAE,GAAA,CAAC,CAAC,GAAA,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aACrF,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,cAAc,EAAE,CAAC;gBACjB,OAAO;aACR;YAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;SAClD;;;;QAKD,SAAS,QAAQ;YACf,OAAO,UAAU,CAAO,UAAC,WAAW,EAAE,UAAU;gBAC9C,SAAS,IAAI,CAAC,IAAa;oBACzB,IAAI,IAAI,EAAE;wBACR,WAAW,EAAE,CAAC;qBACf;yBAAM;;;wBAGL,kBAAkB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;qBAClD;iBACF;gBAED,IAAI,CAAC,KAAK,CAAC,CAAC;aACb,CAAC,CAAC;SACJ;QAED,SAAS,QAAQ;YACf,IAAI,YAAY,EAAE;gBAChB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;aAClC;YAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC9C,OAAO,UAAU,CAAU,UAAC,WAAW,EAAE,UAAU;oBACjD,+BAA+B,CAC7B,MAAM,EACN;wBACE,WAAW,EAAE,UAAA,KAAK;4BAChB,YAAY,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;4BACpG,WAAW,CAAC,KAAK,CAAC,CAAC;yBACpB;wBACD,WAAW,EAAE,cAAM,OAAA,WAAW,CAAC,IAAI,CAAC,GAAA;wBACpC,WAAW,EAAE,UAAU;qBACxB,CACF,CAAC;iBACH,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;;QAGD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,UAAA,WAAW;YAC3D,IAAI,CAAC,YAAY,EAAE;gBACjB,kBAAkB,CAAC,cAAM,OAAA,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,GAAA,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;aACrF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aAC7B;SACF,CAAC,CAAC;;QAGH,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE,UAAA,WAAW;YACzD,IAAI,CAAC,aAAa,EAAE;gBAClB,kBAAkB,CAAC,cAAM,OAAA,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,GAAA,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;aACxF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aAC7B;SACF,CAAC,CAAC;;QAGH,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE;YAC/C,IAAI,CAAC,YAAY,EAAE;gBACjB,kBAAkB,CAAC,cAAM,OAAA,oDAAoD,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;aACxF;iBAAM;gBACL,QAAQ,EAAE,CAAC;aACZ;SACF,CAAC,CAAC;;QAGH,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YACzE,IAAM,YAAU,GAAG,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;YAEhH,IAAI,CAAC,aAAa,EAAE;gBAClB,kBAAkB,CAAC,cAAM,OAAA,oBAAoB,CAAC,MAAM,EAAE,YAAU,CAAC,GAAA,EAAE,IAAI,EAAE,YAAU,CAAC,CAAC;aACtF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,YAAU,CAAC,CAAC;aAC5B;SACF;QAED,yBAAyB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEtC,SAAS,qBAAqB;;;YAG5B,IAAM,eAAe,GAAG,YAAY,CAAC;YACrC,OAAO,kBAAkB,CACvB,YAAY,EACZ,cAAM,OAAA,eAAe,KAAK,YAAY,GAAG,qBAAqB,EAAE,GAAG,SAAS,GAAA,CAC7E,CAAC;SACH;QAED,SAAS,kBAAkB,CAAC,MAAuC,EACvC,OAAsB,EACtB,MAA6B;YACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC/B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAC7B;iBAAM;gBACL,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAChC;SACF;QAED,SAAS,iBAAiB,CAAC,MAAuC,EAAE,OAAsB,EAAE,MAAkB;YAC5G,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,EAAE,CAAC;aACV;iBAAM;gBACL,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAClC;SACF;QAED,SAAS,kBAAkB,CAAC,MAA8B,EAAE,eAAyB,EAAE,aAAmB;YACxG,IAAI,YAAY,EAAE;gBAChB,OAAO;aACR;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,SAAS,CAAC,CAAC;aACrD;iBAAM;gBACL,SAAS,EAAE,CAAC;aACb;YAED,SAAS,SAAS;gBAChB,WAAW,CACT,MAAM,EAAE,EACR,cAAM,OAAA,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,GAAA,EAC9C,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAA,CACrC,CAAC;aACH;SACF;QAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;YAC9C,IAAI,YAAY,EAAE;gBAChB,OAAO;aACR;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,cAAM,OAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,GAAA,CAAC,CAAC;aAC1E;iBAAM;gBACL,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC1B;SACF;QAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;YAC9C,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;aACrD;YACD,IAAI,OAAO,EAAE;gBACX,MAAM,CAAC,KAAK,CAAC,CAAC;aACf;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;SACF;KACF,CAAC,CAAC;AACL;;ACnOA;;;;;;IA6BE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAMD,sBAAI,wDAAW;;;;;aAAf;YACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMD,sCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YAED,OAAO,6CAA6C,CAAC,IAAI,CAAC,CAAC;SAC5D;;;OAAA;;;;;IAMD,+CAAK,GAAL;QACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;SACxE;QAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;KAC5C;IAMD,iDAAO,GAAP,UAAQ,KAAqB;QAArB,sBAAA,EAAA,QAAW,SAAU;QAC3B,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,SAAS,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;SAC1E;QAED,OAAO,sCAAsC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5D;;;;IAKD,+CAAK,GAAL,UAAM,CAAkB;QAAlB,kBAAA,EAAA,aAAkB;QACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC/C;;IAGD,0CAAC,WAAW,CAAC,GAAb,UAAc,MAAW;QACvB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,8CAA8C,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;;IAGD,0CAAC,SAAS,CAAC,GAAX,UAAY,WAA2B;QACrC,IAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;gBACrD,mBAAmB,CAAC,MAAM,CAAC,CAAC;aAC7B;iBAAM;gBACL,+CAA+C,CAAC,IAAI,CAAC,CAAC;aACvD;YAED,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAChC;aAAM;YACL,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,+CAA+C,CAAC,IAAI,CAAC,CAAC;SACvD;KACF;IACH,sCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;IACjE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,iCAAiC;QACxC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,iCAAiC,CAAU,CAAM;IACxD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAgD;IACvG,IAAM,UAAU,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO;KAGsB;IAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;IAE3B,IAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAChD,WAAW,CACT,WAAW,EACX;QACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,+CAA+C,CAAC,UAAU,CAAC,CAAC;SAC7D;KACF,EACD,UAAA,CAAC;QACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,6CAA6C,CAAC,UAAgD;IACrG,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAClF,OAAO,IAAI,CAAC;KACb;IAED,IAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAChD;IAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,8CAA8C,CAAC,UAAgD;IACtG,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;IACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;IACzC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;AACjD,CAAC;AAED;SAEgB,oCAAoC,CAAC,UAAgD;IACnG,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO;KACR;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;IAElC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAC3D,mBAAmB,CAAC,MAAM,CAAC,CAAC;KAC7B;AACH,CAAC;SAEe,sCAAsC,CACpD,UAA8C,EAC9C,KAAQ;IAER,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO;KACR;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAClF,gCAAgC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACxD;SAAM;QACL,IAAI,SAAS,SAAA,CAAC;QACd,IAAI;YACF,SAAS,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACtD;QAAC,OAAO,UAAU,EAAE;YACnB,oCAAoC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7D,MAAM,UAAU,CAAC;SAClB;QAED,IAAI;YACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACpD;QAAC,OAAO,QAAQ,EAAE;YACjB,oCAAoC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,CAAC;SAChB;KACF;IAED,+CAA+C,CAAC,UAAU,CAAC,CAAC;AAC9D,CAAC;SAEe,oCAAoC,CAAC,UAAgD,EAAE,CAAM;IAC3G,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO;KACR;IAED,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;SAEe,6CAA6C,CAC3D,UAAgD;IAEhD,IAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAE1D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;AAED;SACgB,8CAA8C,CAC5D,UAAgD;IAEhD,IAAI,6CAA6C,CAAC,UAAU,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,gDAAgD,CAC9D,UAAgD;IAEhD,IAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,KAAK,UAAU,EAAE;QACvD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,aAA6C;IAGnG,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAE9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;IAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC5B,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;IAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAE9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;IAE9C,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;QACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;QAE/B,+CAA+C,CAAC,UAAU,CAAC,CAAC;KAC7D,EACD,UAAA,CAAC;QACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;AACJ,CAAC;SAEe,wDAAwD,CACtE,MAAyB,EACzB,gBAA8C,EAC9C,aAAqB,EACrB,aAA6C;IAE7C,IAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAEhH,IAAI,cAAc,GAAmC,cAAM,OAAA,SAAS,GAAA,CAAC;IACrE,IAAI,aAAa,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAC9E,IAAI,eAAe,GAAmC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE3F,IAAI,gBAAgB,CAAC,KAAK,KAAK,SAAS,EAAE;QACxC,cAAc,GAAG,cAAM,OAAA,gBAAgB,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KAC5D;IACD,IAAI,gBAAgB,CAAC,IAAI,KAAK,SAAS,EAAE;QACvC,aAAa,GAAG,cAAM,OAAA,gBAAgB,CAAC,IAAK,CAAC,UAAU,CAAC,GAAA,CAAC;KAC1D;IACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE;QACzC,eAAe,GAAG,UAAA,MAAM,IAAI,OAAA,gBAAgB,CAAC,MAAO,CAAC,MAAM,CAAC,GAAA,CAAC;KAC9D;IAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;AACJ,CAAC;AAED;AAEA,SAASE,sCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,+CAA6C,IAAI,2DAAwD,CAAC,CAAC;AAC/G;;SCtWgB,iBAAiB,CAAI,MAAyB,EACzB,eAAwB;IAG3D,IAAI,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;QACpE,OAAO,qBAAqB,CAAC,MAAuC,CACjB,CAAC;KACrD;IACD,OAAO,wBAAwB,CAAC,MAAuB,CAAC,CAAC;AAC3D,CAAC;SAEe,wBAAwB,CAAI,MAAyB,EACzB,eAAwB;IAIlE,IAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAE7D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAY,CAAC;IACjB,IAAI,OAAY,CAAC;IACjB,IAAI,OAA0B,CAAC;IAC/B,IAAI,OAA0B,CAAC;IAE/B,IAAI,oBAAqE,CAAC;IAC1E,IAAM,aAAa,GAAG,UAAU,CAAY,UAAA,OAAO;QACjD,oBAAoB,GAAG,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,SAAS,aAAa;QACpB,IAAI,OAAO,EAAE;YACX,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,IAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,UAAA,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,SAAS,GAAG,KAAK,CAAC;oBAClB,IAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,IAAM,MAAM,GAAG,KAAK,CAAC;;;;;;oBAQrB,IAAI,CAAC,SAAS,EAAE;wBACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;qBACH;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;qBACH;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,SAAS,EAAE;wBACb,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;oBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;iBAC/G;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;iBAC/G;gBAED,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAErD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,cAAc;;KAEtB;IAED,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAChF,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAEhF,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,UAAC,CAAM;QAC1C,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;QACjH,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;YAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACjC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;SAEe,qBAAqB,CAAC,MAA0B;IAI9D,IAAI,MAAM,GAAqC,kCAAkC,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAY,CAAC;IACjB,IAAI,OAAY,CAAC;IACjB,IAAI,OAA2B,CAAC;IAChC,IAAI,OAA2B,CAAC;IAEhC,IAAI,oBAAqE,CAAC;IAC1E,IAAM,aAAa,GAAG,UAAU,CAAO,UAAA,OAAO;QAC5C,oBAAoB,GAAG,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,SAAS,kBAAkB,CAAC,UAA4C;QACtE,aAAa,CAAC,UAAU,CAAC,cAAc,EAAE,UAAA,CAAC;YACxC,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,OAAO;aACR;YACD,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACxE,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;aACjC;SACF,CAAC,CAAC;KACJ;IAED,SAAS,qBAAqB;QAC5B,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;YAEtC,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;YACpD,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,IAAM,WAAW,GAA4B;YAC3C,WAAW,EAAE,UAAA,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,mBAAmB,GAAG,KAAK,CAAC;oBAC5B,mBAAmB,GAAG,KAAK,CAAC;oBAE5B,IAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,IAAI,MAAM,GAAG,KAAK,CAAC;oBACnB,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;wBAC5B,IAAI;4BACF,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;yBACnC;wBAAC,OAAO,MAAM,EAAE;4BACf,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAC7E,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAC7E,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;4BAC3D,OAAO;yBACR;qBACF;oBAED,IAAI,CAAC,SAAS,EAAE;wBACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;qBAChF;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;qBAChF;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,mBAAmB,EAAE;wBACvB,cAAc,EAAE,CAAC;qBAClB;yBAAM,IAAI,mBAAmB,EAAE;wBAC9B,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;oBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;iBACtE;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;iBACtE;gBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;iBAC3E;gBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;iBAC3E;gBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;KACtD;IAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,UAAmB;QACpE,IAAI,6BAA6B,CAAa,MAAM,CAAC,EAAE;YAErD,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;YACjD,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,IAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QAClD,IAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QAEnD,IAAM,eAAe,GAAqC;YACxD,WAAW,EAAE,UAAA,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,mBAAmB,GAAG,KAAK,CAAC;oBAC5B,mBAAmB,GAAG,KAAK,CAAC;oBAE5B,IAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBACxD,IAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBAEzD,IAAI,CAAC,aAAa,EAAE;wBAClB,IAAI,WAAW,SAAA,CAAC;wBAChB,IAAI;4BACF,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;yBACxC;wBAAC,OAAO,MAAM,EAAE;4BACf,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAChF,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BACjF,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;4BAC3D,OAAO;yBACR;wBACD,IAAI,CAAC,YAAY,EAAE;4BACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;yBAC7F;wBACD,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;qBACzF;yBAAM,IAAI,CAAC,YAAY,EAAE;wBACxB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC7F;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,mBAAmB,EAAE;wBACvB,cAAc,EAAE,CAAC;qBAClB;yBAAM,IAAI,mBAAmB,EAAE;wBAC9B,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE,UAAA,KAAK;gBAChB,OAAO,GAAG,KAAK,CAAC;gBAEhB,IAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;gBACxD,IAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;gBAEzD,IAAI,CAAC,YAAY,EAAE;oBACjB,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;iBACzE;gBACD,IAAI,CAAC,aAAa,EAAE;oBAClB,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;iBAC1E;gBAED,IAAI,KAAK,KAAK,SAAS,EAAE;oBAGvB,IAAI,CAAC,YAAY,EAAE;wBACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC7F;oBACD,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxF,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;qBAC/E;iBACF;gBAED,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;oBACnC,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,4BAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;KAC7D;IAED,SAAS,cAAc;QACrB,IAAI,OAAO,EAAE;YACX,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,IAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAClG,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,qBAAqB,EAAE,CAAC;SACzB;aAAM;YACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,KAAK,CAAC,CAAC;SAC/C;QAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,cAAc;QACrB,IAAI,OAAO,EAAE;YACX,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,IAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAClG,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,qBAAqB,EAAE,CAAC;SACzB;aAAM;YACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC;SAC9C;QAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,cAAc;QACrB,OAAO;KACR;IAED,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACrF,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAErF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B;;SCvagB,oCAAoC,CAClD,MAAyD,EACzD,OAAe;IAEf,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAM,QAAQ,GAAG,MAAmD,CAAC;IACrE,IAAM,qBAAqB,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,CAAC;IAC9D,IAAM,MAAM,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC;IAChC,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,OAAO;QACL,qBAAqB,EAAE,qBAAqB,KAAK,SAAS;YACxD,SAAS;YACT,uCAAuC,CACrC,qBAAqB,EAClB,OAAO,6CAA0C,CACrD;QACH,MAAM,EAAE,MAAM,KAAK,SAAS;YAC1B,SAAS;YACT,qCAAqC,CAAC,MAAM,EAAE,QAAS,EAAK,OAAO,8BAA2B,CAAC;QACjG,IAAI,EAAE,IAAI,KAAK,SAAS;YACtB,SAAS;YACT,mCAAmC,CAAC,IAAI,EAAE,QAAS,EAAK,OAAO,4BAAyB,CAAC;QAC3F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,oCAAoC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC9F,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,IAAI,EAAK,OAAO,4BAAyB,CAAC;KAC5G,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAC5C,EAAkC,EAClC,QAAuC,EACvC,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,MAAW,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,GAAA,CAAC;AAC9D,CAAC;AAED,SAAS,mCAAmC,CAC1C,EAAgD,EAChD,QAA0C,EAC1C,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAAuC,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AAC9F,CAAC;AAED,SAAS,oCAAoC,CAC3C,EAAiD,EACjD,QAA0C,EAC1C,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAAuC,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AAC9F,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,OAAe;IAC9D,IAAI,GAAG,KAAG,IAAM,CAAC;IACjB,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,MAAM,IAAI,SAAS,CAAI,OAAO,UAAK,IAAI,8DAA2D,CAAC,CAAC;KACrG;IACD,OAAO,IAAI,CAAC;AACd;;SC1EgB,oBAAoB,CAAC,OAA0D,EAC1D,OAAe;IAClD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,IAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,+BAA+B,CAAC,IAAI,EAAK,OAAO,4BAAyB,CAAC;KAClH,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAY,EAAE,OAAe;IACpE,IAAI,GAAG,KAAG,IAAM,CAAC;IACjB,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,MAAM,IAAI,SAAS,CAAI,OAAO,UAAK,IAAI,oEAAiE,CAAC,CAAC;KAC3G;IACD,OAAO,IAAI,CAAC;AACd;;SCZgB,sBAAsB,CAAC,OAAyD,EACzD,OAAe;IACpD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,IAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;AACnD;;SCPgB,kBAAkB,CAAC,OAA6C,EAC7C,OAAe;IAChD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,IAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;IAC3C,IAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,IAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;IAC3C,IAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,iBAAiB,CAAC,MAAM,EAAK,OAAO,8BAA2B,CAAC,CAAC;KAClE;IACD,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;QACrC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,MAAM,QAAA;KACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,OAAe;IACzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,IAAI,SAAS,CAAI,OAAO,4BAAyB,CAAC,CAAC;KAC1D;AACH;;SCpBgB,2BAA2B,CACzC,IAAuD,EACvD,OAAe;IAEf,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhC,IAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;IAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAClE,oBAAoB,CAAC,QAAQ,EAAK,OAAO,gCAA6B,CAAC,CAAC;IAExE,IAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;IAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAClE,oBAAoB,CAAC,QAAQ,EAAK,OAAO,gCAA6B,CAAC,CAAC;IAExE,OAAO,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,CAAC;AAChC;;ACiDA;;;;;;IAmBE,wBAAY,mBAAuF,EACvF,WAAuD;QADvD,oCAAA,EAAA,wBAAuF;QACvF,4BAAA,EAAA,gBAAuD;QACjE,IAAI,mBAAmB,KAAK,SAAS,EAAE;YACrC,mBAAmB,GAAG,IAAI,CAAC;SAC5B;aAAM;YACL,YAAY,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;SACtD;QAED,IAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAM,gBAAgB,GAAG,oCAAoC,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAEtG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE;YACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;aACpF;YACD,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,qDAAqD,CACnD,IAAqC,EACrC,gBAAgB,EAChB,aAAa,CACd,CAAC;SACH;aAAM;YAEL,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,wDAAwD,CACtD,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,aAAa,CACd,CAAC;SACH;KACF;IAKD,sBAAI,kCAAM;;;;aAAV;YACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMD,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;;;OAAA;;;;;;;IAQD,+BAAM,GAAN,UAAO,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC,CAAC;SAC/F;QAED,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC3C;IAqBD,kCAAS,GAAT,UACE,UAAyE;QAAzE,2BAAA,EAAA,sBAAyE;QAEzE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;SAC9C;QAED,IAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAEpE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAGlB;QAChC,OAAO,+BAA+B,CAAC,IAAqC,CAAC,CAAC;KAC/E;IAaD,oCAAW,GAAX,UACE,YAA8E,EAC9E,UAAqD;QAArD,2BAAA,EAAA,eAAqD;QAErD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,aAAa,CAAC,CAAC;SAChD;QACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAEvD,IAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC/E,IAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAEnE,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;SACvG;QACD,IAAI,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9C,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;SACvG;QAED,IAAM,OAAO,GAAG,oBAAoB,CAClC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAC5G,CAAC;QAEF,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,SAAS,CAAC,QAAQ,CAAC;KAC3B;IAUD,+BAAM,GAAN,UAAO,WAAiD,EACjD,UAAqD;QAArD,2BAAA,EAAA,eAAqD;QAC1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;SACpE;QACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;YAClC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QAED,IAAI,OAAmC,CAAC;QACxC,IAAI;YACF,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;SAC9D;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QACD,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE;YACvC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QAED,OAAO,oBAAoB,CACzB,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CACrG,CAAC;KACH;;;;;;;;;;;;IAaD,4BAAG,GAAH;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,KAAK,CAAC,CAAC;SACxC;QAED,IAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAW,CAAC,CAAC;QAChD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;KACtC;IAcD,+BAAM,GAAN,UAAO,UAAwE;QAAxE,2BAAA,EAAA,sBAAwE;QAC7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,QAAQ,CAAC,CAAC;SAC3C;QAED,IAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtE,OAAO,kCAAkC,CAAI,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAC3E;IAMH,qBAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;IAChD,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACzB,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAClE,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AACD,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;IAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,aAAa,EAAE;QACpE,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM;QACtC,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAkBD;AAEA;SACgB,oBAAoB,CAAI,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAiB,EACjB,aAAuD;IADvD,8BAAA,EAAA,iBAAiB;IACjB,8BAAA,EAAA,8BAAsD,OAAA,CAAC,GAAA,GAClD;IAE3C,IAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAChH,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;SACgB,wBAAwB,CACtC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C;IAE/C,IAAM,MAAM,GAAuB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACvG,iCAAiC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAEpH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAsB;IACtD,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,CAAC;SAEe,gBAAgB,CAAC,CAAU;IACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,cAAc,CAAC;AACrC,CAAC;SAQe,sBAAsB,CAAC,MAAsB;IAG3D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;SAEgB,oBAAoB,CAAI,MAAyB,EAAE,MAAW;IAC5E,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC/B,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjD;IAED,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,eAAe;YAC9C,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC9C;IAED,IAAM,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAClF,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;SAEe,mBAAmB,CAAI,MAAyB;IAG9D,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEzB,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO;KACR;IAED,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;QAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,WAAW;YACtC,WAAW,CAAC,WAAW,EAAE,CAAC;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KAC1C;AACH,CAAC;SAEe,mBAAmB,CAAI,MAAyB,EAAE,CAAM;IAItE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IAExB,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO;KACR;IAED,gCAAgC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE5C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;QAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,WAAW;YACtC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KAC1C;SAAM;QAGL,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,eAAe;YAC9C,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC9C;AACH,CAAC;AAmBD;AAEA,SAASC,2BAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAAC,8BAA4B,IAAI,0CAAuC,CAAC,CAAC;AAChG;;SCjhBgB,0BAA0B,CAAC,IAA4C,EAC5C,OAAe;IACxD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,IAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;IAC1C,mBAAmB,CAAC,aAAa,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC3E,OAAO;QACL,aAAa,EAAE,yBAAyB,CAAC,aAAa,CAAC;KACxD,CAAC;AACJ;;ACNA;AACA,IAAM,sBAAsB,GAAG,UAAC,KAAsB;IACpD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC,CAAC;AACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAE,MAAM,EAAE;IACpD,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH;;;;;;IASE,mCAAY,OAA4B;QACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAChE,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,uCAAuC,GAAG,OAAO,CAAC,aAAa,CAAC;KACtE;IAKD,sBAAI,oDAAa;;;;aAAjB;YACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,6BAA6B,CAAC,eAAe,CAAC,CAAC;aACtD;YACD,OAAO,IAAI,CAAC,uCAAuC,CAAC;SACrD;;;OAAA;IAKD,sBAAI,2CAAI;;;;aAAR;YACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,6BAA6B,CAAC,MAAM,CAAC,CAAC;aAC7C;YACD,OAAO,sBAAsB,CAAC;SAC/B;;;OAAA;IACH,gCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;IAC3D,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC7E,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,IAAI,SAAS,CAAC,yCAAuC,IAAI,qDAAkD,CAAC,CAAC;AACtH,CAAC;SAEe,2BAA2B,CAAC,CAAM;IAChD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;QACvF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;AAChD;;ACxEA;AACA,IAAM,iBAAiB,GAAG;IACxB,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AACF,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH;;;;;;IASE,8BAAY,OAA4B;QACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC3D,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,kCAAkC,GAAG,OAAO,CAAC,aAAa,CAAC;KACjE;IAKD,sBAAI,+CAAa;;;;aAAjB;YACE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBACjC,MAAM,wBAAwB,CAAC,eAAe,CAAC,CAAC;aACjD;YACD,OAAO,IAAI,CAAC,kCAAkC,CAAC;SAChD;;;OAAA;IAMD,sBAAI,sCAAI;;;;;aAAR;YACE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBACjC,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;aACxC;YACD,OAAO,iBAAiB,CAAC;SAC1B;;;OAAA;IACH,2BAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,EAAE;IACtD,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACxE,KAAK,EAAE,sBAAsB;QAC7B,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,wBAAwB,CAAC,IAAY;IAC5C,OAAO,IAAI,SAAS,CAAC,oCAAkC,IAAI,gDAA6C,CAAC,CAAC;AAC5G,CAAC;SAEe,sBAAsB,CAAC,CAAM;IAC3C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,EAAE;QAClF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,oBAAoB,CAAC;AAC3C;;SCnEgB,kBAAkB,CAAO,QAAkC,EAClC,OAAe;IACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;IAC5C,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,CAAC;IACtC,IAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QACzF,YAAY,cAAA;QACZ,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QACzF,SAAS,EAAE,SAAS,KAAK,SAAS;YAChC,SAAS;YACT,mCAAmC,CAAC,SAAS,EAAE,QAAS,EAAK,OAAO,iCAA8B,CAAC;QACrG,YAAY,cAAA;KACb,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAA+C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AACtG,CAAC;AAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAA+C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AACtG,CAAC;AAED,SAAS,mCAAmC,CAC1C,EAAsC,EACtC,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,KAAQ,EAAE,UAA+C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,GAAA,CAAC;AACvH;;ACjCA;AAEA;;;;;;;;;IA2BE,yBAAY,cAAyD,EACzD,mBAA+D,EAC/D,mBAA+D;QAF/D,+BAAA,EAAA,mBAAyD;QACzD,oCAAA,EAAA,wBAA+D;QAC/D,oCAAA,EAAA,wBAA+D;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,cAAc,GAAG,IAAI,CAAC;SACvB;QAED,IAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QACzF,IAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAExF,IAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;SACxD;QACD,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;SACxD;QAED,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxE,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QACrE,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxE,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAErE,IAAI,oBAAgE,CAAC;QACrE,IAAM,YAAY,GAAG,UAAU,CAAO,UAAA,OAAO;YAC3C,oBAAoB,GAAG,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,yBAAyB,CACvB,IAAI,EAAE,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,CAC/G,CAAC;QACF,oDAAoD,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExE,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;YACnC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;SAC1E;aAAM;YACL,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACjC;KACF;IAKD,sBAAI,qCAAQ;;;;aAAZ;YACE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;OAAA;IAKD,sBAAI,qCAAQ;;;;aAAZ;YACE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;OAAA;IACH,sBAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE;IACjD,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC9B,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC/B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnE,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAwCD,SAAS,yBAAyB,CAAO,MAA6B,EAC7B,YAA2B,EAC3B,qBAA6B,EAC7B,qBAAqD,EACrD,qBAA6B,EAC7B,qBAAqD;IAC5F,SAAS,cAAc;QACrB,OAAO,YAAY,CAAC;KACrB;IAED,SAAS,cAAc,CAAC,KAAQ;QAC9B,OAAO,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,SAAS,cAAc,CAAC,MAAW;QACjC,OAAO,wCAAwC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjE;IAED,SAAS,cAAc;QACrB,OAAO,wCAAwC,CAAC,MAAM,CAAC,CAAC;KACzD;IAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAC9D,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAEtF,SAAS,aAAa;QACpB,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;KAC1D;IAED,SAAS,eAAe,CAAC,MAAW;QAClC,2CAA2C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EACrE,qBAAqB,CAAC,CAAC;;IAG/D,MAAM,CAAC,aAAa,GAAG,SAAU,CAAC;IAClC,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;IAC/C,MAAM,CAAC,kCAAkC,GAAG,SAAU,CAAC;IACvD,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;QAC1E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,eAAe,CAAC;AACtC,CAAC;AAED;AACA,SAAS,oBAAoB,CAAC,MAAuB,EAAE,CAAM;IAC3D,oCAAoC,CAClC,MAAM,CAAC,SAAS,CAAC,yBAAiE,EAClF,CAAC,CACF,CAAC;IACF,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAuB,EAAE,CAAM;IAClF,+CAA+C,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnF,4CAA4C,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC5F,IAAI,MAAM,CAAC,aAAa,EAAE;;;;QAIxB,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC/C;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAuB,EAAE,YAAqB;;IAIpF,IAAI,MAAM,CAAC,0BAA0B,KAAK,SAAS,EAAE;QACnD,MAAM,CAAC,kCAAkC,EAAE,CAAC;KAC7C;IAED,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC,UAAA,OAAO;QACpD,MAAM,CAAC,kCAAkC,GAAG,OAAO,CAAC;KACrD,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,CAAC;AAED;AAEA;;;;;;IAaE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAKD,sBAAI,yDAAW;;;;aAAf;YACE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,oCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YAED,IAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,yBAAyB,CAAC;YAC/F,OAAO,6CAA6C,CAAC,kBAAwD,CAAC,CAAC;SAChH;;;OAAA;IAMD,kDAAO,GAAP,UAAQ,KAAqB;QAArB,sBAAA,EAAA,QAAW,SAAU;QAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,SAAS,CAAC,CAAC;SACvD;QAED,uCAAuC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtD;;;;;IAMD,gDAAK,GAAL,UAAM,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACrD;;;;;IAMD,oDAAS,GAAT;QACE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,WAAW,CAAC,CAAC;SACzD;QAED,yCAAyC,CAAC,IAAI,CAAC,CAAC;KACjD;IACH,uCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,SAAS,EAAE;IAClE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,gCAAgC,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACpF,KAAK,EAAE,kCAAkC;QACzC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,kCAAkC,CAAU,CAAM;IACzD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;QAC1E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,gCAAgC,CAAC;AACvD,CAAC;AAED,SAAS,qCAAqC,CAAO,MAA6B,EAC7B,UAA+C,EAC/C,kBAA+C,EAC/C,cAAmC;IAItF,UAAU,CAAC,0BAA0B,GAAG,MAAM,CAAC;IAC/C,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC;IAE/C,UAAU,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;IACpD,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;AAC9C,CAAC;AAED,SAAS,oDAAoD,CAAO,MAA6B,EAC7B,WAAuC;IACzG,IAAM,UAAU,GAAwC,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;IAElH,IAAI,kBAAkB,GAAG,UAAC,KAAQ;QAChC,IAAI;YACF,uCAAuC,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;YAC3E,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAAC,OAAO,gBAAgB,EAAE;YACzB,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;SAC9C;KACF,CAAC;IAEF,IAAI,cAAc,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE/E,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE;QACvC,kBAAkB,GAAG,UAAA,KAAK,IAAI,OAAA,WAAW,CAAC,SAAU,CAAC,KAAK,EAAE,UAAU,CAAC,GAAA,CAAC;KACzE;IACD,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;QACnC,cAAc,GAAG,cAAM,OAAA,WAAW,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KACvD;IAED,qCAAqC,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAiD;IACxG,UAAU,CAAC,mBAAmB,GAAG,SAAU,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;AAC1C,CAAC;AAED,SAAS,uCAAuC,CAAI,UAA+C,EAAE,KAAQ;IAC3G,IAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IACrD,IAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;IAC5G,IAAI,CAAC,gDAAgD,CAAC,kBAAkB,CAAC,EAAE;QACzE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;KAC7E;;;IAKD,IAAI;QACF,sCAAsC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;KACnE;IAAC,OAAO,CAAC,EAAE;;QAEV,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;KACrC;IAED,IAAM,YAAY,GAAG,8CAA8C,CAAC,kBAAkB,CAAC,CAAC;IACxF,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;QAEzC,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC9C;AACH,CAAC;AAED,SAAS,qCAAqC,CAAC,UAAiD,EAAE,CAAM;IACtG,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,gDAAgD,CAAO,UAA+C,EAC/C,KAAQ;IACtE,IAAM,gBAAgB,GAAG,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAA,CAAC;QACxD,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC;KACT,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yCAAyC,CAAI,UAA+C;IACnG,IAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IACrD,IAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;IAE5G,oCAAoC,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAM,KAAK,GAAG,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC1D,2CAA2C,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;AAEA,SAAS,wCAAwC,CAAO,MAA6B,EAAE,KAAQ;IAG7F,IAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;IAErD,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,IAAM,yBAAyB,GAAG,MAAM,CAAC,0BAA0B,CACnB;QAChD,OAAO,oBAAoB,CAAC,yBAAyB,EAAE;YACrD,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,MAAM,QAAQ,CAAC,YAAY,CAAC;aAED;YAC7B,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;SAClF,CAAC,CAAC;KACJ;IAED,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAuB,EAAE,MAAW;;;IAGpF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,wCAAwC,CAAO,MAA6B;;IAEnF,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAElC,IAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;IACrD,IAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,+CAA+C,CAAC,UAAU,CAAC,CAAC;;IAG5D,OAAO,oBAAoB,CAAC,YAAY,EAAE;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;YACjC,MAAM,QAAQ,CAAC,YAAY,CAAC;SAC7B;QACD,oCAAoC,CAAC,QAAQ,CAAC,yBAA+D,CAAC,CAAC;KAChH,EAAE,UAAA,CAAC;QACF,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,QAAQ,CAAC,YAAY,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED;AAEA,SAAS,yCAAyC,CAAC,MAAuB;;IAMxE,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;IAG9C,OAAO,MAAM,CAAC,0BAA0B,CAAC;AAC3C,CAAC;AAED;AAEA,SAAS,oCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,gDAA8C,IAAI,4DAAyD,CAAC,CAAC;AACjH,CAAC;AAED;AAEA,SAAS,yBAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAClB,+BAA6B,IAAI,2CAAwC,CAAC,CAAC;AAC/E;;ACzfA,IAAM,OAAO,GAAG;IACd,cAAc,gBAAA;IACd,+BAA+B,iCAAA;IAC/B,4BAA4B,8BAAA;IAC5B,yBAAyB,2BAAA;IACzB,2BAA2B,6BAAA;IAC3B,wBAAwB,0BAAA;IAExB,cAAc,gBAAA;IACd,+BAA+B,iCAAA;IAC/B,2BAA2B,6BAAA;IAE3B,yBAAyB,2BAAA;IACzB,oBAAoB,sBAAA;IAEpB,eAAe,iBAAA;IACf,gCAAgC,kCAAA;CACjC,CAAC;AAEF;AACA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;IAClC,KAAK,IAAM,IAAI,IAAI,OAAO,EAAE;QAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACvD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE;gBACnC,KAAK,EAAE,OAAO,CAAC,IAA8B,CAAC;gBAC9C,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;SACJ;KACF;;;;;"} \ No newline at end of file +{"version":3,"file":"polyfill.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js index 9f58216..95561e5 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -3702,10 +3702,16 @@ const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; - Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3764,10 +3770,16 @@ const countSizeFunction = () => { return 1; }; - Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map index 14d2030..0b4238f 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map @@ -1 +1 @@ -{"version":3,"file":"ponyfill.es2018.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ponyfill.es2018.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs index c97e692..f4ddff0 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ /// const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? @@ -3696,10 +3696,16 @@ function convertQueuingStrategyInit(init, context) { const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; -Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3758,10 +3764,16 @@ function IsByteLengthQueuingStrategy(x) { const countSizeFunction = () => { return 1; }; -Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map index 52fbe86..5057974 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map @@ -1 +1 @@ -{"version":3,"file":"ponyfill.es2018.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":";;;AAAA;AAEA,MAAM,cAAc,GAClB,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;IACjE,MAAM;IACN,WAAW,IAAI,UAAU,WAAW,GAAoB;;ACL5D;SAEgB,IAAI;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAC;KACf;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAEM,MAAM,OAAO,GAAG,UAAU,EAAE;;SCdnB,YAAY,CAAC,CAAM;IACjC,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1E,CAAC;AAEM,MAAM,8BAA8B,GAUrC,IAAI;;ACbV,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AACnD,MAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrE,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAEnD,UAAU,CAAI,QAGrB;IACP,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;SAEe,mBAAmB,CAAI,KAAyB;IAC9D,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;SAEe,mBAAmB,CAAY,MAAW;IACxD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;SAEe,kBAAkB,CAChC,OAAmB,EACnB,WAA4D,EAC5D,UAA8D;;;IAG9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAiC,CAAC;AACpG,CAAC;SAEe,WAAW,CACzB,OAAmB,EACnB,WAAoD,EACpD,UAAsD;IACtD,kBAAkB,CAChB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EACpD,SAAS,EACT,8BAA8B,CAC/B,CAAC;AACJ,CAAC;SAEe,eAAe,CAAI,OAAmB,EAAE,WAAmD;IACzG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACpC,CAAC;SAEe,aAAa,CAAC,OAAyB,EAAE,UAAqD;IAC5G,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;SAEe,oBAAoB,CAClC,OAAmB,EACnB,kBAAmE,EACnE,gBAAoE;IACpE,OAAO,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC;SAEe,yBAAyB,CAAC,OAAyB;IACjE,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,8BAA8B,CAAC,CAAC;AACzE,CAAC;AAEM,MAAM,cAAc,GAA6B,CAAC;IACvD,MAAM,oBAAoB,GAAG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAC/D,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE;QAC9C,OAAO,oBAAoB,CAAC;KAC7B;IAED,MAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,CAAC,EAAc,KAAK,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC,GAAG,CAAC;SAEW,WAAW,CAAwB,CAA+B,EAAE,CAAI,EAAE,IAAO;IAC/F,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;KACnD;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;SAEe,WAAW,CAAwB,CAAgD,EAChD,CAAI,EACJ,IAAO;IAIxD,IAAI;QACF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KACrD;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;AACH;;ACzFA;AACA;AAEA,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAOnC;;;;;;MAMa,WAAW;IAMtB;QAHQ,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,CAAC,CAAC;;QAIhB,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;;;;QAIzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;;QAEjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChB;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;;;;;IAMD,IAAI,CAAC,OAAU;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,GAAG,OAAO,CACe;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,oBAAoB,GAAG,CAAC,EAAE;YACzD,OAAO,GAAG;gBACR,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,SAAS;aACjB,CAAC;SACH;;;QAID,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;SACzB;QACD,EAAE,IAAI,CAAC,KAAK,CAAC;KACd;;;IAID,KAAK;QAGH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,oBAAoB,EAAE;YAGtC,QAAQ,GAAG,QAAQ,CAAC,KAAM,CAAC;YAC3B,SAAS,GAAG,CAAC,CAAC;SACf;;QAGD,EAAE,IAAI,CAAC,KAAK,CAAC;QACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;SACxB;;QAGD,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAU,CAAC;QAEjC,OAAO,OAAO,CAAC;KAChB;;;;;;;;;IAUD,OAAO,CAAC,QAA8B;QACpC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACrB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,OAAO,CAAC,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACxD,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;gBAGzB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;gBACnB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,CAAC,GAAG,CAAC,CAAC;gBACN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,MAAM;iBACP;aACF;YACD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,EAAE,CAAC,CAAC;SACL;KACF;;;IAID,IAAI;QAGF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAChC;;;SCrIa,qCAAqC,CAAI,MAA+B,EAAE,MAAyB;IACjH,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IAExB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,oCAAoC,CAAC,MAAM,CAAC,CAAC;KAC9C;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QACrC,8CAA8C,CAAC,MAAM,CAAC,CAAC;KACxD;SAAM;QAGL,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;KAC7E;AACH,CAAC;AAED;AACA;SAEgB,iCAAiC,CAAC,MAAiC,EAAE,MAAW;IAC9F,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CACb;IAC7B,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;SAEe,kCAAkC,CAAC,MAAiC;IAIlF,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,UAAU,EAAE;QACrD,gCAAgC,CAC9B,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;KACtG;SAAM;QACL,yCAAyC,CACvC,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;KACtG;IAED,MAAM,CAAC,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;IAChD,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED;SAEgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;AAC/E,CAAC;AAED;SAEgB,oCAAoC,CAAC,MAAiC;IACpF,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;QACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;SAEe,8CAA8C,CAAC,MAAiC,EAAE,MAAW;IAC3G,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;SAEe,8CAA8C,CAAC,MAAiC;IAC9F,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;SAEe,gCAAgC,CAAC,MAAiC,EAAE,MAAW;IAC7F,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;SAEe,yCAAyC,CAAC,MAAiC,EAAE,MAAW;IAItG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;SAEe,iCAAiC,CAAC,MAAiC;IACjF,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;QAC/C,OAAO;KACR;IAED,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C;;ACjGO,MAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,MAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAGA,cAAM,CAAC,iBAAiB,CAAC,CAAC;AAC9C,MAAM,SAAS,GAAGA,cAAM,CAAC,eAAe,CAAC;;ACHhD;AAEA;AACA,MAAM,cAAc,GAA2B,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC3E,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACLD;AAEA;AACA,MAAM,SAAS,GAAsB,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACFD;SACgB,YAAY,CAAC,CAAM;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1D,CAAC;SAEe,gBAAgB,CAAC,GAAY,EACZ,OAAe;IAC9C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QAC3C,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;KACrD;AACH,CAAC;AAID;SACgB,cAAc,CAAC,CAAU,EAAE,OAAe;IACxD,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,qBAAqB,CAAC,CAAC;KACtD;AACH,CAAC;AAED;SACgB,QAAQ,CAAC,CAAM;IAC7B,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1E,CAAC;SAEe,YAAY,CAAC,CAAU,EACV,OAAe;IAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QAChB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;KACrD;AACH,CAAC;SAEe,sBAAsB,CAAgB,CAAgB,EAChB,QAAgB,EAChB,OAAe;IACnE,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,SAAS,CAAC,aAAa,QAAQ,oBAAoB,OAAO,IAAI,CAAC,CAAC;KAC3E;AACH,CAAC;SAEe,mBAAmB,CAAgB,CAAgB,EAChB,KAAa,EACb,OAAe;IAChE,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,oBAAoB,OAAO,IAAI,CAAC,CAAC;KAC9D;AACH,CAAC;AAED;SACgB,yBAAyB,CAAC,KAAc;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;SACgB,uCAAuC,CAAC,KAAc,EAAE,OAAe;IACrF,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAE3C,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,yBAAyB,CAAC,CAAC;KAC1D;IAED,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,UAAU,EAAE;QACpC,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,qCAAqC,UAAU,OAAO,UAAU,aAAa,CAAC,CAAC;KAC9G;IAED,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACjC,OAAO,CAAC,CAAC;KACV;;;;;IAOD,OAAO,CAAC,CAAC;AACX;;SC3FgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;IAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,2BAA2B,CAAC,CAAC;KAC5D;AACH;;ACsBA;SAEgB,kCAAkC,CAAI,MAAsB;IAC1E,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;SAEgB,4BAA4B,CAAI,MAAyB,EACzB,WAA2B;IAIxE,MAAM,CAAC,OAA2C,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtF,CAAC;SAEe,gCAAgC,CAAI,MAAyB,EAAE,KAAoB,EAAE,IAAa;IAChH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAyC,CAEvB;IAExC,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAG,CAAC;IAClD,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,WAAW,EAAE,CAAC;KAC3B;SAAM;QACL,WAAW,CAAC,WAAW,CAAC,KAAM,CAAC,CAAC;KACjC;AACH,CAAC;SAEe,gCAAgC,CAAI,MAAyB;IAC3E,OAAQ,MAAM,CAAC,OAA0C,CAAC,aAAa,CAAC,MAAM,CAAC;AACjF,CAAC;SAEe,8BAA8B,CAAC,MAAsB;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE;QAC1C,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;MAKa,2BAA2B;IAYtC,YAAY,MAAyB;QACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KACxC;;;;;IAMD,IAAI,MAAM;QACR,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxE;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;IAKD,MAAM,CAAC,SAAc,SAAS;QAC5B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACxD;;;;;;IAOD,IAAI;QACF,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAC;SACtE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,cAAqE,CAAC;QAC1E,IAAI,aAAqC,CAAC;QAC1C,MAAM,OAAO,GAAG,UAAU,CAAqC,CAAC,OAAO,EAAE,MAAM;YAC7E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,KAAK,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACnE,WAAW,EAAE,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACnE,WAAW,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;SACnC,CAAC;QACF,+BAA+B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC;KAChB;;;;;;;;;;IAWD,WAAW;QACT,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;SAC5G;QAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;IAC7D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC/E,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,6BAA6B,CAAU,CAAM;IAC3D,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;AAClD,CAAC;SAEe,+BAA+B,CAAI,MAAsC,EACtC,WAA2B;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,WAAW,CAAC,WAAW,EAAE,CAAC;KAC3B;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QACtC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC9C;SAAM;QAEL,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,WAA+B,CAAC,CAAC;KAC9E;AACH,CAAC;AAED;AAEA,SAAS,gCAAgC,CAAC,IAAY;IACpD,OAAO,IAAI,SAAS,CAClB,yCAAyC,IAAI,oDAAoD,CAAC,CAAC;AACvG;;ACvPA;AAEA;AACO,MAAM,sBAAsB,GACjC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,sBAAiD,CAAC,CAAC,SAAS,CAAC;;ACJ3G;MAqCa,+BAA+B;IAM1C,YAAY,MAAsC,EAAE,aAAsB;QAHlE,oBAAe,GAA4D,SAAS,CAAC;QACrF,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;KACrC;IAED,IAAI;QACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;YACzC,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;YAChE,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAED,MAAM,CAAC,KAAU;QACf,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,eAAe;YACzB,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC;YACpE,WAAW,EAAE,CAAC;KACjB;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;SAC5D;QAED,IAAI,cAAqE,CAAC;QAC1E,IAAI,aAAqC,CAAC;QAC1C,MAAM,OAAO,GAAG,UAAU,CAAqC,CAAC,OAAO,EAAE,MAAM;YAC7E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,KAAK;gBAChB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;;;gBAGjC,cAAc,CAAC,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;aACrE;YACD,WAAW,EAAE;gBACX,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD;YACD,WAAW,EAAE,MAAM;gBACjB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,aAAa,CAAC,MAAM,CAAC,CAAC;aACvB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;KAChB;IAEO,YAAY,CAAC,KAAU;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;SAG5B;QAE1C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,MAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAChE,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACnD;CACF;AAWD,MAAM,oCAAoC,GAA6C;IACrF,IAAI;QACF,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC,CAAC;SAC5E;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KACvC;IAED,MAAM,CAAiD,KAAU;QAC/D,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC9E;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9C;CACK,CAAC;AACT,IAAI,sBAAsB,KAAK,SAAS,EAAE;IACxC,MAAM,CAAC,cAAc,CAAC,oCAAoC,EAAE,sBAAsB,CAAC,CAAC;CACrF;AAED;SAEgB,kCAAkC,CAAI,MAAyB,EACzB,aAAsB;IAC1E,MAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,+BAA+B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxE,MAAM,QAAQ,GAA2C,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC7G,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAU,CAAM;IACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IAED,IAAI;;QAEF,OAAQ,CAA8C,CAAC,kBAAkB;YACvE,+BAA+B,CAAC;KACnC;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED;AAEA,SAAS,sCAAsC,CAAC,IAAY;IAC1D,OAAO,IAAI,SAAS,CAAC,+BAA+B,IAAI,mDAAmD,CAAC,CAAC;AAC/G;;AC5LA;AAEA;AACA,MAAM,WAAW,GAAwB,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;;IAElE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;;SCNe,mBAAmB,CAAkB,QAAW;;;IAG9D,OAAO,QAAQ,CAAC,KAAK,EAAO,CAAC;AAC/B,CAAC;SAEe,kBAAkB,CAAC,IAAiB,EACjB,UAAkB,EAClB,GAAgB,EAChB,SAAiB,EACjB,CAAS;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED;SACgB,mBAAmB,CAA4B,CAAI;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAQD;AACA;SACgB,gBAAgB,CAAC,CAAkB;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,gBAAgB,CAAC,MAAuB,EAAE,KAAa,EAAE,GAAW;;;IAGlF,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACjC;IACD,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf;;SCtCgB,mBAAmB,CAAC,CAAS;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,iBAAiB,CAAC,CAAkB;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACrF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC;;SCRgB,YAAY,CAAI,SAAuC;IAIrE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC;IACvC,IAAI,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE;QACjC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;KAC/B;IAED,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;SAEe,oBAAoB,CAAI,SAAuC,EAAE,KAAQ,EAAE,IAAY;IAGrG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE;QACnD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;KAC9E;IAED,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC;AACpC,CAAC;SAEe,cAAc,CAAI,SAAuC;IAIvE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;SAEe,UAAU,CAAI,SAA4B;IAGxD,SAAS,CAAC,MAAM,GAAG,IAAI,WAAW,EAAK,CAAC;IACxC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;AAChC;;ACdA;;;;;MAKa,yBAAyB;IAMpC;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;;;;IAKD,IAAI,IAAI;QACN,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;SAC9C;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAUD,OAAO,CAAC,YAAgC;QACtC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,SAAS,CAAC,CAAC;SACjD;QACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,YAAY,GAAG,uCAAuC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;YAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;SAC/D;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAM,CAAC,EAAE,CAKA;QAE1C,mCAAmC,CAAC,IAAI,CAAC,uCAAuC,EAAE,YAAY,CAAC,CAAC;KACjG;IAUD,kBAAkB,CAAC,IAAiC;QAClD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;SAC5D;QACD,sBAAsB,CAAC,IAAI,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;YAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;SAC/D;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;QAED,8CAA8C,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;KACpG;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;IAC3D,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACxC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC7E,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAyCD;;;;;MAKa,4BAA4B;IA4BvC;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;;;;IAKD,IAAI,WAAW;QACb,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;SAC9D;QAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;KACzD;;;;;IAMD,IAAI,WAAW;QACb,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;SAC9D;QAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;KACzD;;;;;IAMD,KAAK;QACH,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;SACnF;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,2DAA2D,CAAC,CAAC;SACzG;QAED,iCAAiC,CAAC,IAAI,CAAC,CAAC;KACzC;IAOD,OAAO,CAAC,KAAkC;QACxC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,SAAS,CAAC,CAAC;SAC1D;QAED,sBAAsB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;SAC3D;QACD,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;SAC5D;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;SACrD;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,gEAAgE,CAAC,CAAC;SAC9G;QAED,mCAAmC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAClD;;;;IAKD,KAAK,CAAC,IAAS,SAAS;QACtB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,iCAAiC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC5C;;IAGD,CAAC,WAAW,CAAC,CAAC,MAAW;QACvB,iDAAiD,CAAC,IAAI,CAAC,CAAC;QAExD,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,2CAA2C,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;KACf;;IAGD,CAAC,SAAS,CAAC,CAAC,WAAoC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,CACF;QAE/C,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YAG5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;YACnC,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;YAEzC,4CAA4C,CAAC,IAAI,CAAC,CAAC;YAEnD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAE9E,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;SACR;QAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC1D,IAAI,qBAAqB,KAAK,SAAS,EAAE;YACvC,IAAI,MAAmB,CAAC;YACxB,IAAI;gBACF,MAAM,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;aACjD;YAAC,OAAO,OAAO,EAAE;gBAChB,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO;aACR;YAED,MAAM,kBAAkB,GAA8B;gBACpD,MAAM;gBACN,gBAAgB,EAAE,qBAAqB;gBACvC,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,qBAAqB;gBACjC,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,eAAe,EAAE,UAAU;gBAC3B,UAAU,EAAE,SAAS;aACtB,CAAC;YAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACjD;QAED,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,4CAA4C,CAAC,IAAI,CAAC,CAAC;KACpD;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,SAAS,EAAE;IAC9D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAChF,KAAK,EAAE,8BAA8B;QACrC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,8BAA8B,CAAC,CAAM;IACnD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,EAAE;QAC7E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,4BAA4B,CAAC;AACnD,CAAC;AAED,SAAS,2BAA2B,CAAC,CAAM;IACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;QACvF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;AAChD,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAwC;IAC5F,MAAM,UAAU,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO;KAGsB;IAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;;IAG3B,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAChD,WAAW,CACT,WAAW,EACX;QACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,4CAA4C,CAAC,UAAU,CAAC,CAAC;SAC1D;KACF,EACD,CAAC;QACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KAClD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iDAAiD,CAAC,UAAwC;IACjG,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAC9D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,oDAAoD,CAC3D,MAA0B,EAC1B,kBAAyC;IAIzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAE9B,IAAI,GAAG,IAAI,CAAC;KACb;IAED,MAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;IAChG,IAAI,kBAAkB,CAAC,UAAU,KAAK,SAAS,EAAE;QAC/C,gCAAgC,CAAC,MAAM,EAAE,UAAmC,EAAE,IAAI,CAAC,CAAC;KACrF;SAAM;QAEL,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,qDAAqD,CAC5D,kBAAyC;IAEzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAGV;IAExC,OAAO,IAAI,kBAAkB,CAAC,eAAe,CAC3C,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAM,CAAC;AAC9F,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAwC,EACxC,MAAuB,EACvB,UAAkB,EAClB,UAAkB;IACzE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC;AAC3C,CAAC;AAED,SAAS,2DAA2D,CAAC,UAAwC,EACxC,kBAAsC;IACzG,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IAEnD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;IAE1G,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAC1B,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChG,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,GAAG,cAAc,CAAC;IACvE,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC;IAEtE,IAAI,yBAAyB,GAAG,cAAc,CAAC;IAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,eAAe,GAAG,mBAAmB,EAAE;QACzC,yBAAyB,GAAG,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAC7E,KAAK,GAAG,IAAI,CAAC;KACd;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;IAEhC,OAAO,yBAAyB,GAAG,CAAC,EAAE;QACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;QAEhF,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;QACjF,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAElH,IAAI,WAAW,CAAC,UAAU,KAAK,WAAW,EAAE;YAC1C,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;aAAM;YACL,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;YACtC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;SACvC;QACD,UAAU,CAAC,eAAe,IAAI,WAAW,CAAC;QAE1C,sDAAsD,CAAC,UAAU,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAEpG,yBAAyB,IAAI,WAAW,CAAC;KAC1C;IAQD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sDAAsD,CAAC,UAAwC,EACxC,IAAY,EACZ,kBAAsC;IAGpG,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAwC;IAG5F,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE;QAClE,2CAA2C,CAAC,UAAU,CAAC,CAAC;QACxD,mBAAmB,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;KAC/D;SAAM;QACL,4CAA4C,CAAC,UAAU,CAAC,CAAC;KAC1D;AACH,CAAC;AAED,SAAS,iDAAiD,CAAC,UAAwC;IACjG,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE;QACpC,OAAO;KACR;IAED,UAAU,CAAC,YAAY,CAAC,uCAAuC,GAAG,SAAU,CAAC;IAC7E,UAAU,CAAC,YAAY,CAAC,KAAK,GAAG,IAAK,CAAC;IACtC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,gEAAgE,CAAC,UAAwC;IAGhH,OAAO,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9C,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,EAAE;YACpC,OAAO;SACR;QAED,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAE/D,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;YAC/F,gDAAgD,CAAC,UAAU,CAAC,CAAC;YAE7D,oDAAoD,CAClD,UAAU,CAAC,6BAA6B,EACxC,kBAAkB,CACnB,CAAC;SACH;KACF;AACH,CAAC;SAEe,oCAAoC,CAClD,UAAwC,EACxC,IAAO,EACP,eAAmC;IAEnC,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;QACjC,WAAW,GAAI,IAAI,CAAC,WAA6C,CAAC,iBAAiB,CAAC;KACrF;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAA4C,CAAC;;IAG/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;;;IAMhD,MAAM,kBAAkB,GAA8B;QACpD,MAAM;QACN,gBAAgB,EAAE,MAAM,CAAC,UAAU;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,CAAC;QACd,WAAW;QACX,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,MAAM;KACnB,CAAC;IAEF,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;;;;QAMtD,gCAAgC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACxF,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;QAClC,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;YAC/F,MAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;YAEhG,4CAA4C,CAAC,UAAU,CAAC,CAAC;YAEzD,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO;SACR;QAED,IAAI,UAAU,CAAC,eAAe,EAAE;YAC9B,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;YACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEjD,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO;SACR;KACF;IAED,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEtD,gCAAgC,CAAI,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7D,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gDAAgD,CAAC,UAAwC,EACxC,eAAmC;IAG3F,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IACxD,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;QACvC,OAAO,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACvD,MAAM,kBAAkB,GAAG,gDAAgD,CAAC,UAAU,CAAC,CAAC;YACxF,oDAAoD,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;SAClF;KACF;AACH,CAAC;AAED,SAAS,kDAAkD,CAAC,UAAwC,EACxC,YAAoB,EACpB,kBAAsC;IAGhG,sDAAsD,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAErG,IAAI,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,EAAE;QACnE,OAAO;KACR;IAED,gDAAgD,CAAC,UAAU,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACtF,IAAI,aAAa,GAAG,CAAC,EAAE;QACrB,MAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAC3E,MAAM,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC;QACxF,+CAA+C,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;KACjG;IAED,kBAAkB,CAAC,WAAW,IAAI,aAAa,CAAC;IAChD,oDAAoD,CAAC,UAAU,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;IAEnH,gEAAgE,CAAC,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAwC,EAAE,YAAoB;IACjH,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CACJ;IAEvD,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QAEtB,gDAAgD,CAAC,UAA2B,CAAC,CAAC;KAC/E;SAAM;QAGL,kDAAkD,CAAC,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;KAC/F;IAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gDAAgD,CACvD,UAAwC;IAGxC,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;IACzD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,0CAA0C,CAAC,UAAwC;IAC1F,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,IAAI,UAAU,CAAC,eAAe,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,8BAA8B,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC1F,OAAO,IAAI,CAAC;KACb;IAED,IAAI,2BAA2B,CAAC,MAAM,CAAC,IAAI,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC3F,OAAO,IAAI,CAAC;KACb;IAED,MAAM,WAAW,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAC7C;IAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAwC;IAC3F,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;IACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED;SAEgB,iCAAiC,CAAC,UAAwC;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,OAAO;KACR;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;QAClC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QAElC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,oBAAoB,CAAC,WAAW,GAAG,CAAC,EAAE;YACxC,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;YACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEjD,MAAM,CAAC,CAAC;SACT;KACF;IAED,2CAA2C,CAAC,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;SAEe,mCAAmC,CAAC,UAAwC,EAAE,KAAsB;IAClH,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,OAAO;KACR;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IAIpC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAIlD;QACD,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;KAChF;IAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,8BAA8B,CAAC,MAAM,CAAC,EAAE;QAC1C,IAAI,gCAAgC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAElD,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACxG;aAAM;YAEL,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAE3C,gDAAgD,CAAC,UAAU,CAAC,CAAC;aAC9D;YACD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAClF,gCAAgC,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;SAClE;KACF;SAAM,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;;QAE9C,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACvG,gEAAgE,CAAC,UAAU,CAAC,CAAC;KAC9E;SAAM;QAEL,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACxG;IAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;SAEe,iCAAiC,CAAC,UAAwC,EAAE,CAAM;IAChG,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO;KACR;IAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,2CAA2C,CAAC,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;SAEe,0CAA0C,CACxD,UAAwC;IAExC,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/E,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,EACxD,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAEtF,MAAM,WAAW,GAA8B,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAClG,8BAA8B,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9D,UAAU,CAAC,YAAY,GAAG,WAAW,CAAC;KACvC;IACD,OAAO,UAAU,CAAC,YAAY,CAAC;AACjC,CAAC;AAED,SAAS,0CAA0C,CAAC,UAAwC;IAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;SAEe,mCAAmC,CAAC,UAAwC,EAAE,YAAoB;IAGhH,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,kEAAkE,CAAC,CAAC;SACzF;KACF;SAAM;QAEL,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;SACxG;QACD,IAAI,eAAe,CAAC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE;YAC3E,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;SACnD;KACF;IAED,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAErE,2CAA2C,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACxE,CAAC;SAEe,8CAA8C,CAAC,UAAwC,EACxC,IAAqB;IAIlF,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CAAC,mFAAmF,CAAC,CAAC;SAC1G;KACF;SAAM;QAEL,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CACjB,kGAAkG,CACnG,CAAC;SACH;KACF;IAED,IAAI,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU,EAAE;QAChF,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;KACjF;IACD,IAAI,eAAe,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QAC/D,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;KACpF;IACD,IAAI,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE;QAC9E,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;KACjF;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IACvC,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,2CAA2C,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC1E,CAAC;SAEe,iCAAiC,CAAC,MAA0B,EAC1B,UAAwC,EACxC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,qBAAyC;IAOzF,UAAU,CAAC,6BAA6B,GAAG,MAAM,CAAC;IAElD,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;;IAG/B,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IAC5D,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;IAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAE9C,UAAU,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;IAE1D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjD,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;IAE9C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;QACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;QAE/B,4CAA4C,CAAC,UAAU,CAAC,CAAC;KAC1D,EACD,CAAC;QACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KAClD,CACF,CAAC;AACJ,CAAC;SAEe,qDAAqD,CACnE,MAA0B,EAC1B,oBAAmD,EACnD,aAAqB;IAErB,MAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAEvG,IAAI,cAAc,GAAmC,MAAM,SAAS,CAAC;IACrE,IAAI,aAAa,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9E,IAAI,eAAe,GAAmC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE3F,IAAI,oBAAoB,CAAC,KAAK,KAAK,SAAS,EAAE;QAC5C,cAAc,GAAG,MAAM,oBAAoB,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;KAChE;IACD,IAAI,oBAAoB,CAAC,IAAI,KAAK,SAAS,EAAE;QAC3C,aAAa,GAAG,MAAM,oBAAoB,CAAC,IAAK,CAAC,UAAU,CAAC,CAAC;KAC9D;IACD,IAAI,oBAAoB,CAAC,MAAM,KAAK,SAAS,EAAE;QAC7C,eAAe,GAAG,MAAM,IAAI,oBAAoB,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC;KAClE;IAED,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;IACzE,IAAI,qBAAqB,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;KACrE;IAED,iCAAiC,CAC/B,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,CACzG,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAkC,EAClC,UAAwC,EACxC,IAAqB;IAK3D,OAAO,CAAC,uCAAuC,GAAG,UAAU,CAAC;IAC7D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;AAEA,SAAS,8BAA8B,CAAC,IAAY;IAClD,OAAO,IAAI,SAAS,CAClB,uCAAuC,IAAI,kDAAkD,CAAC,CAAC;AACnG,CAAC;AAED;AAEA,SAAS,uCAAuC,CAAC,IAAY;IAC3D,OAAO,IAAI,SAAS,CAClB,0CAA0C,IAAI,qDAAqD,CAAC,CAAC;AACzG;;ACv/BA;SAEgB,+BAA+B,CAAC,MAA0B;IACxE,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;SAEgB,gCAAgC,CAA4B,MAA0B,EAC1B,eAAmC;IAI5G,MAAM,CAAC,OAAqC,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxF,CAAC;SAEe,oCAAoC,CAAC,MAA0B,EAC1B,KAAsB,EACtB,IAAa;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAmC,CAEb;IAE5C,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;IAC1D,IAAI,IAAI,EAAE;QACR,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpC;SAAM;QACL,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpC;AACH,CAAC;SAEe,oCAAoC,CAAC,MAA0B;IAC7E,OAAQ,MAAM,CAAC,OAAoC,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC/E,CAAC;SAEe,2BAA2B,CAAC,MAA0B;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE;QACvC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;MAKa,wBAAwB;IAYnC,YAAY,MAA0B;QACpC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAC9D,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;YACrE,MAAM,IAAI,SAAS,CAAC,uFAAuF;gBACzG,QAAQ,CAAC,CAAC;SACb;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC5C;;;;;IAMD,IAAI,MAAM;QACR,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrE;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;IAKD,MAAM,CAAC,SAAc,SAAS;QAC5B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACxD;;;;;;IAOD,IAAI,CAA4B,IAAO;QACrC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;SAChF;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC,CAAC;SACjF;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC,CAAC;SAC1F;QACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,cAAkE,CAAC;QACvE,IAAI,aAAqC,CAAC;QAC1C,MAAM,OAAO,GAAG,UAAU,CAAkC,CAAC,OAAO,EAAE,MAAM;YAC1E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,eAAe,GAAuB;YAC1C,WAAW,EAAE,KAAK,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACnE,WAAW,EAAE,KAAK,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAClE,WAAW,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;SACnC,CAAC;QACF,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;KAChB;;;;;;;;;;IAWD,WAAW;QACT,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,6BAA6B,CAAC,aAAa,CAAC,CAAC;SACpD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;SAC5G;QAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,SAAS,EAAE;IAC1D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC5E,KAAK,EAAE,0BAA0B;QACjC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,0BAA0B,CAAC,CAAM;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,wBAAwB,CAAC;AAC/C,CAAC;SAEe,4BAA4B,CAC1C,MAAgC,EAChC,IAAO,EACP,eAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC/B,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAClD;SAAM;QACL,oCAAoC,CAClC,MAAM,CAAC,yBAAyD,EAChE,IAAI,EACJ,eAAe,CAChB,CAAC;KACH;AACH,CAAC;AAED;AAEA,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,IAAI,SAAS,CAClB,sCAAsC,IAAI,iDAAiD,CAAC,CAAC;AACjG;;SCjRgB,oBAAoB,CAAC,QAAyB,EAAE,UAAkB;IAChF,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;IAEnC,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO,UAAU,CAAC;KACnB;IAED,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;QACnD,MAAM,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC/C;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;SAEe,oBAAoB,CAAI,QAA4B;IAClE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAE1B,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,MAAM,CAAC,CAAC;KAChB;IAED,OAAO,IAAI,CAAC;AACd;;SCtBgB,sBAAsB,CAAI,IAA2C,EAC3C,OAAe;IACvD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;IACxB,OAAO;QACL,aAAa,EAAE,aAAa,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACjG,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,0BAA0B,CAAC,IAAI,EAAE,GAAG,OAAO,yBAAyB,CAAC;KAC7G,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAI,EAAkC,EAClC,OAAe;IACpD,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,KAAK,IAAI,yBAAyB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD;;SCNgB,qBAAqB,CAAI,QAAkC,EAClC,OAAe;IACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QAC5F,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAW,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,MAAM,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,UAA2C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,kCAAkC,CACzC,EAAkC,EAClC,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAQ,EAAE,UAA2C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACnH;;SCrEgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;IAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,2BAA2B,CAAC,CAAC;KAC5D;AACH;;SCsBgB,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;QAC/C,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,OAAO,OAAQ,KAAqB,CAAC,OAAO,KAAK,SAAS,CAAC;KAC5D;IAAC,WAAM;;QAEN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAsBD,MAAM,uBAAuB,GAAG,OAAQ,eAAuB,KAAK,UAAU,CAAC;AAE/E;;;;;SAKgB,qBAAqB;IACnC,IAAI,uBAAuB,EAAE;QAC3B,OAAO,IAAK,eAA8C,EAAE,CAAC;KAC9D;IACD,OAAO,SAAS,CAAC;AACnB;;ACnBA;;;;;AAKA,MAAM,cAAc;IAuBlB,YAAY,oBAA0D,EAAE,EAC5D,cAAqD,EAAE;QACjE,IAAI,iBAAiB,KAAK,SAAS,EAAE;YACnC,iBAAiB,GAAG,IAAI,CAAC;SAC1B;aAAM;YACL,YAAY,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;SACpD;QAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAEnF,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;SACnD;QAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAExD,sDAAsD,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;KAC5G;;;;IAKD,IAAI,MAAM;QACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMC,2BAAyB,CAAC,QAAQ,CAAC,CAAC;SAC3C;QAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACrC;;;;;;;;;;IAWD,KAAK,CAAC,SAAc,SAAS;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;SAC9F;QAED,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC1C;;;;;;;;;IAUD,KAAK;QACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;SAC9F;QAED,IAAI,mCAAmC,CAAC,IAAI,CAAC,EAAE;YAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;SACrF;QAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAClC;;;;;;;;;IAUD,SAAS;QACP,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;SAC9C;QAED,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;KACjD;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;IAChD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAClE,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAqBD;AAEA,SAAS,kCAAkC,CAAI,MAAyB;IACtE,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;AACA,SAAS,oBAAoB,CAAI,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAa,GAAG,CAAC,EACjB,gBAAgD,MAAM,CAAC;IAGtF,MAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAEhH,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAClE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAI,MAAyB;IAC5D,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;;;IAI3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAEhC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;;;IAI3B,MAAM,CAAC,yBAAyB,GAAG,SAAU,CAAC;;;IAI9C,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;;;IAI1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;;IAIzC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;;;IAIjC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;IAGzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;;IAGxC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU;IAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,cAAc,CAAC;AACrC,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAsB;IAGpD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAsB,EAAE,MAAW;;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC7D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,MAAM,CAAC,yBAAyB,CAAC,YAAY,GAAG,MAAM,CAAC;IACvD,MAAA,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,0CAAE,KAAK,EAAE,CAAC;;;;IAK3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAA6B,CAAC;IAEnD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;QAC7C,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,OAAO,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC;KAGO;IAErD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,kBAAkB,GAAG,IAAI,CAAC;;QAE1B,MAAM,GAAG,SAAS,CAAC;KACpB;IAED,MAAM,OAAO,GAAG,UAAU,CAAY,CAAC,OAAO,EAAE,MAAM;QACpD,MAAM,CAAC,oBAAoB,GAAG;YAC5B,QAAQ,EAAE,SAAU;YACpB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;YACf,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;KACH,CAAC,CAAC;IACH,MAAM,CAAC,oBAAqB,CAAC,QAAQ,GAAG,OAAO,CAAC;IAEhD,IAAI,CAAC,kBAAkB,EAAE;QACvB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA2B;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;QAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CACtC,kBAAkB,KAAK,2DAA2D,CAAC,CAAC,CAAC;KAIpC;IAErD,MAAM,OAAO,GAAG,UAAU,CAAY,CAAC,OAAO,EAAE,MAAM;QACpD,MAAM,YAAY,GAAiB;YACjC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;KACrC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,KAAK,UAAU,EAAE;QACxE,gCAAgC,CAAC,MAAM,CAAC,CAAC;KAC1C;IAED,oCAAoC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAEvE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;AAEA,SAAS,6BAA6B,CAAC,MAAsB;IAI3D,MAAM,OAAO,GAAG,UAAU,CAAY,CAAC,OAAO,EAAE,MAAM;QACpD,MAAM,YAAY,GAAiB;YACjC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC1C,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,+BAA+B,CAAC,MAAsB,EAAE,KAAU;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;KAGoB;IAC7B,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAsB,EAAE,MAAW;IAItE,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAClB;IAEjC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,qDAAqD,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvE;IAED,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE;QAC5E,4BAA4B,CAAC,MAAM,CAAC,CAAC;KACtC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAsB;IAG1D,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAAC;IAE/C,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY;QACxC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;IAE1C,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,iDAAiD,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACjD,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAExC,IAAI,YAAY,CAAC,mBAAmB,EAAE;QACpC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClC,iDAAiD,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACnF,WAAW,CACT,OAAO,EACP;QACE,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxB,iDAAiD,CAAC,MAAM,CAAC,CAAC;KAC3D,EACD,CAAC,MAAW;QACV,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,iDAAiD,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC,CAAC;AACP,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;AAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;IAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;IAErE,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAEzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAE0B;IAErD,IAAI,KAAK,KAAK,UAAU,EAAE;;QAExB,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACzC;KACF;IAED,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,iCAAiC,CAAC,MAAM,CAAC,CAAC;KAIF;AAC5C,CAAC;AAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;IAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;;IAGrE,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;KACzC;IACD,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED;AACA,SAAS,mCAAmC,CAAC,MAAsB;IACjE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QACpF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAsB;IACtE,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC5F,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sCAAsC,CAAC,MAAsB;IAGpE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;IACpD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;AACnC,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAsB;IAGzE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,iDAAiD,CAAC,MAAsB;IAE/E,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;QAGtC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;KAClC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;KAC/D;AACH,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAsB,EAAE,YAAqB;IAIrF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;QACjE,IAAI,YAAY,EAAE;YAChB,8BAA8B,CAAC,MAAM,CAAC,CAAC;SACxC;aAAM;YAGL,gCAAgC,CAAC,MAAM,CAAC,CAAC;SAC1C;KACF;IAED,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,CAAC;AAED;;;;;MAKa,2BAA2B;IAoBtC,YAAY,MAAyB;QACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACnC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE;gBACxE,mCAAmC,CAAC,IAAI,CAAC,CAAC;aAC3C;iBAAM;gBACL,6CAA6C,CAAC,IAAI,CAAC,CAAC;aACrD;YAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;aAAM,IAAI,KAAK,KAAK,UAAU,EAAE;YAC/B,6CAA6C,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACzE,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;YAC7B,6CAA6C,CAAC,IAAI,CAAC,CAAC;YACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;SACtD;aAAM;YAGL,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,6CAA6C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACjE,8CAA8C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SACnE;KACF;;;;;IAMD,IAAI,MAAM;QACR,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxE;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;;;;;;IAUD,IAAI,WAAW;QACb,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,MAAM,0BAA0B,CAAC,aAAa,CAAC,CAAC;SACjD;QAED,OAAO,yCAAyC,CAAC,IAAI,CAAC,CAAC;KACxD;;;;;;;;;IAUD,IAAI,KAAK;QACP,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;;;;IAKD,KAAK,CAAC,SAAc,SAAS;QAC3B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACjE;QAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACvD;;;;IAKD,KAAK;QACH,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,mCAAmC,CAAC,MAAM,CAAC,EAAE;YAC/C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;SACrF;QAED,OAAO,gCAAgC,CAAC,IAAI,CAAC,CAAC;KAC/C;;;;;;;;;;;IAYD,WAAW;QACT,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO;SAG4B;QAErC,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IAYD,KAAK,CAAC,QAAW,SAAU;QACzB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;SACpE;QAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtD;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;IAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC/E,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,6BAA6B,CAAU,CAAM;IACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE;QACpE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;AAClD,CAAC;AAED;AAEA,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;IACxF,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,oDAAoD,CAAC,MAAmC;IAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;QACrE,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAGG;IAErD,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,sDAAsD,CAAC,MAAmC,EAAE,KAAU;IAC7G,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE;QAC5C,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACjD;SAAM;QACL,yCAAyC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC1D;AACH,CAAC;AAED,SAAS,qDAAqD,CAAC,MAAmC,EAAE,KAAU;IAC5G,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE;QAC3C,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAChD;SAAM;QACL,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,CAAC;AAED,SAAS,yCAAyC,CAAC,MAAmC;IACpF,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,6CAA6C,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAmC;IAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAER;IAElC,MAAM,aAAa,GAAG,IAAI,SAAS,CACjC,kFAAkF,CAAC,CAAC;IAEtF,qDAAqD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;;;IAI7E,sDAAsD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE9E,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED,SAAS,gCAAgC,CAAI,MAAsC,EAAE,KAAQ;IAC3F,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAEpD,MAAM,SAAS,GAAG,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAEjF,IAAI,MAAM,KAAK,MAAM,CAAC,oBAAoB,EAAE;QAC1C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;KACpE;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjD;IACD,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;QACrE,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;KACvG;IACD,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAGrB;IAE7B,MAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtD,oCAAoC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,aAAa,GAAkB,EAAS,CAAC;AAI/C;;;;;MAKa,+BAA+B;IAwB1C;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;;;;;;;;IASD,IAAI,WAAW;QACb,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAME,sCAAoC,CAAC,aAAa,CAAC,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;;;;IAKD,IAAI,MAAM;QACR,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,QAAQ,CAAC,CAAC;SACtD;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;;;;YAIvC,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;SAC1F;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;KACrC;;;;;;;;IASD,KAAK,CAAC,IAAS,SAAS;QACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QACpD,IAAI,KAAK,KAAK,UAAU,EAAE;;;YAGxB,OAAO;SACR;QAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC/C;;IAGD,CAAC,UAAU,CAAC,CAAC,MAAW;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,8CAA8C,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;;IAGD,CAAC,UAAU,CAAC;QACV,UAAU,CAAC,IAAI,CAAC,CAAC;KAClB;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;IACjE,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,iCAAiC;QACxC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,iCAAiC,CAAC,CAAM;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAqB,EACrB,aAA6C;IAI5F,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;;IAG9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;IAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;IACtD,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAE5C,MAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,WAAW,CACT,YAAY,EACZ;QAEE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,mDAAmD,CAAC,UAAU,CAAC,CAAC;KACjE,EACD,CAAC;QAEC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC5C,CACF,CAAC;AACJ,CAAC;AAED,SAAS,sDAAsD,CAAI,MAAyB,EACzB,cAA0C,EAC1C,aAAqB,EACrB,aAA6C;IAC9G,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAE5E,IAAI,cAAc,GAAmC,MAAM,SAAS,CAAC;IACrE,IAAI,cAAc,GAAgC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACvF,IAAI,cAAc,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/E,IAAI,cAAc,GAAmC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE1F,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,MAAM,cAAc,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;KAC1D;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,KAAK,IAAI,cAAc,CAAC,KAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;KACpE;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,MAAM,cAAc,CAAC,KAAM,EAAE,CAAC;KAChD;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,MAAM,IAAI,cAAc,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC;KAC1D;IAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CACjH,CAAC;AACJ,CAAC;AAED;AACA,SAAS,8CAA8C,CAAC,UAAgD;IACtG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;AACjD,CAAC;AAED,SAAS,oCAAoC,CAAI,UAA8C;IAC7F,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IACnD,mDAAmD,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,2CAA2C,CAAI,UAA8C,EAC9C,KAAQ;IAC9D,IAAI;QACF,OAAO,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;KACjD;IAAC,OAAO,UAAU,EAAE;QACnB,4CAA4C,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;KACV;AACH,CAAC;AAED,SAAS,6CAA6C,CAAC,UAAgD;IACrG,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;AAED,SAAS,oCAAoC,CAAI,UAA8C,EAC9C,KAAQ,EACR,SAAiB;IAChE,IAAI;QACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;KACpD;IAAC,OAAO,QAAQ,EAAE;QACjB,4CAA4C,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE,OAAO;KACR;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IACpD,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChF,MAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACxD;IAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED;AAEA,SAAS,mDAAmD,CAAI,UAA8C;IAC5G,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO;KACR;IAED,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACuB;IAClD,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,OAAO;KACR;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,aAAa,EAAE;QAC3B,2CAA2C,CAAC,UAAU,CAAC,CAAC;KACzD;SAAM;QACL,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAgD,EAAE,KAAU;IAChH,IAAI,UAAU,CAAC,yBAAyB,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,oCAAoC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAgD;IACnG,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,sCAAsC,CAAC,MAAM,CAAC,CAAC;IAE/C,YAAY,CAAC,UAAU,CAAC,CACe;IAEvC,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IACtD,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,WAAW,CACT,gBAAgB,EAChB;QACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;KAC3C,EACD,MAAM;QACJ,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,2CAA2C,CAAI,UAA8C,EAAE,KAAQ;IAC9G,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,2CAA2C,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,WAAW,CACT,gBAAgB,EAChB;QACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAC0B;QAErD,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE;YACxE,MAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;YAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SACxD;QAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;KACjE,EACD,MAAM;QACJ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,8CAA8C,CAAC,UAAU,CAAC,CAAC;SAC5D;QACD,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,8CAA8C,CAAC,UAAgD;IACtG,MAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;IAC9E,OAAO,WAAW,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;AAEA,SAAS,oCAAoC,CAAC,UAAgD,EAAE,KAAU;IACxG,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAEd;IAErC,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;AAEA,SAASC,2BAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAAC,4BAA4B,IAAI,uCAAuC,CAAC,CAAC;AAChG,CAAC;AAED;AAEA,SAASC,sCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,6CAA6C,IAAI,wDAAwD,CAAC,CAAC;AAC/G,CAAC;AAGD;AAEA,SAAS,gCAAgC,CAAC,IAAY;IACpD,OAAO,IAAI,SAAS,CAClB,yCAAyC,IAAI,oDAAoD,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,oCAAoC,CAAC,MAAmC;IAC/E,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;QACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;QACtC,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,8CAA8C,CAAC,MAAmC,EAAE,MAAW;IACtG,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,8CAA8C,CAAC,MAAmC;IACzF,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;IACxF,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KAEwC;IAEjD,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,yCAAyC,CAAC,MAAmC,EAAE,MAAW;IAKjG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAmC;IAC5E,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;QAC/C,OAAO;KAEwC;IAEjD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,mCAAmC,CAAC,MAAmC;IAC9E,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;QAChD,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC;QACvC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;KACtC,CAAC,CAAC;IACH,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;AACxC,CAAC;AAED,SAAS,6CAA6C,CAAC,MAAmC,EAAE,MAAW;IACrG,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,6CAA6C,CAAC,MAAmC;IACxF,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,+BAA+B,CAAC,MAAmC,EAAE,MAAW;IACvF,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,OAAO;KACR;IAED,yBAAyB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC;AACzC,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAmC;IAIzE,mCAAmC,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAmC,EAAE,MAAW;IAIhG,6CAA6C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC;IAC3E,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;AAC1C;;ACj4CA;AACO,MAAM,kBAAkB,GAC7B,OAAO,YAAY,KAAK,WAAW,GAAG,YAAY,GAAG,SAAS;;ACFhE;AAaA,SAAS,yBAAyB,CAAC,IAAa;IAC9C,IAAI,EAAE,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,IAAK,IAAgC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED,SAAS,0BAA0B;;IAEjC,MAAM,IAAI,GAAG,SAAS,YAAY,CAAqB,OAAgB,EAAE,IAAa;QACpF,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC;QAC5B,IAAI,KAAK,CAAC,iBAAiB,EAAE;YAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACjD;KACK,CAAC;IACT,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1G,OAAO,IAAI,CAAC;AACd,CAAC;AAED;AACA,MAAMC,cAAY,GAChB,yBAAyB,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,0BAA0B,EAAE;;SCbnF,oBAAoB,CAAI,MAAyB,EACzB,IAAuB,EACvB,YAAqB,EACrB,YAAqB,EACrB,aAAsB,EACtB,MAA+B;IAUrE,MAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,kCAAkC,CAAI,IAAI,CAAC,CAAC;IAE3D,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,YAAY,GAAG,KAAK,CAAC;;IAGzB,IAAI,YAAY,GAAG,mBAAmB,CAAO,SAAS,CAAC,CAAC;IAExD,OAAO,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;QAChC,IAAI,cAA0B,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,cAAc,GAAG;gBACf,MAAM,KAAK,GAAG,IAAIA,cAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACxD,MAAM,OAAO,GAA+B,EAAE,CAAC;gBAC/C,IAAI,CAAC,YAAY,EAAE;oBACjB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;4BAC9B,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;yBACzC;wBACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBACvC,CAAC,CAAC;iBACJ;gBACD,IAAI,CAAC,aAAa,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;4BAChC,OAAO,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;yBAC5C;wBACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBACvC,CAAC,CAAC;iBACJ;gBACD,kBAAkB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aACrF,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,cAAc,EAAE,CAAC;gBACjB,OAAO;aACR;YAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;SAClD;;;;QAKD,SAAS,QAAQ;YACf,OAAO,UAAU,CAAO,CAAC,WAAW,EAAE,UAAU;gBAC9C,SAAS,IAAI,CAAC,IAAa;oBACzB,IAAI,IAAI,EAAE;wBACR,WAAW,EAAE,CAAC;qBACf;yBAAM;;;wBAGL,kBAAkB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;qBAClD;iBACF;gBAED,IAAI,CAAC,KAAK,CAAC,CAAC;aACb,CAAC,CAAC;SACJ;QAED,SAAS,QAAQ;YACf,IAAI,YAAY,EAAE;gBAChB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;aAClC;YAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC9C,OAAO,UAAU,CAAU,CAAC,WAAW,EAAE,UAAU;oBACjD,+BAA+B,CAC7B,MAAM,EACN;wBACE,WAAW,EAAE,KAAK;4BAChB,YAAY,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;4BACpG,WAAW,CAAC,KAAK,CAAC,CAAC;yBACpB;wBACD,WAAW,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC;wBACpC,WAAW,EAAE,UAAU;qBACxB,CACF,CAAC;iBACH,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;;QAGD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,WAAW;YAC3D,IAAI,CAAC,YAAY,EAAE;gBACjB,kBAAkB,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;aACrF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aAC7B;SACF,CAAC,CAAC;;QAGH,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE,WAAW;YACzD,IAAI,CAAC,aAAa,EAAE;gBAClB,kBAAkB,CAAC,MAAM,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;aACxF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aAC7B;SACF,CAAC,CAAC;;QAGH,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE;YAC/C,IAAI,CAAC,YAAY,EAAE;gBACjB,kBAAkB,CAAC,MAAM,oDAAoD,CAAC,MAAM,CAAC,CAAC,CAAC;aACxF;iBAAM;gBACL,QAAQ,EAAE,CAAC;aACZ;SACF,CAAC,CAAC;;QAGH,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YACzE,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;YAEhH,IAAI,CAAC,aAAa,EAAE;gBAClB,kBAAkB,CAAC,MAAM,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;aACtF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;aAC5B;SACF;QAED,yBAAyB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEtC,SAAS,qBAAqB;;;YAG5B,MAAM,eAAe,GAAG,YAAY,CAAC;YACrC,OAAO,kBAAkB,CACvB,YAAY,EACZ,MAAM,eAAe,KAAK,YAAY,GAAG,qBAAqB,EAAE,GAAG,SAAS,CAC7E,CAAC;SACH;QAED,SAAS,kBAAkB,CAAC,MAAuC,EACvC,OAAsB,EACtB,MAA6B;YACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC/B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAC7B;iBAAM;gBACL,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAChC;SACF;QAED,SAAS,iBAAiB,CAAC,MAAuC,EAAE,OAAsB,EAAE,MAAkB;YAC5G,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,EAAE,CAAC;aACV;iBAAM;gBACL,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAClC;SACF;QAED,SAAS,kBAAkB,CAAC,MAA8B,EAAE,eAAyB,EAAE,aAAmB;YACxG,IAAI,YAAY,EAAE;gBAChB,OAAO;aACR;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,SAAS,CAAC,CAAC;aACrD;iBAAM;gBACL,SAAS,EAAE,CAAC;aACb;YAED,SAAS,SAAS;gBAChB,WAAW,CACT,MAAM,EAAE,EACR,MAAM,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,EAC9C,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CACrC,CAAC;aACH;SACF;QAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;YAC9C,IAAI,YAAY,EAAE;gBAChB,OAAO;aACR;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aAC1E;iBAAM;gBACL,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC1B;SACF;QAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;YAC9C,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;aACrD;YACD,IAAI,OAAO,EAAE;gBACX,MAAM,CAAC,KAAK,CAAC,CAAC;aACf;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;SACF;KACF,CAAC,CAAC;AACL;;ACnOA;;;;;MAKa,+BAA+B;IAwB1C;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;;;;;IAMD,IAAI,WAAW;QACb,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMD,sCAAoC,CAAC,aAAa,CAAC,CAAC;SAC3D;QAED,OAAO,6CAA6C,CAAC,IAAI,CAAC,CAAC;KAC5D;;;;;IAMD,KAAK;QACH,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;SACxE;QAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;KAC5C;IAMD,OAAO,CAAC,QAAW,SAAU;QAC3B,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,SAAS,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;SAC1E;QAED,OAAO,sCAAsC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5D;;;;IAKD,KAAK,CAAC,IAAS,SAAS;QACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC/C;;IAGD,CAAC,WAAW,CAAC,CAAC,MAAW;QACvB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,8CAA8C,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;;IAGD,CAAC,SAAS,CAAC,CAAC,WAA2B;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;gBACrD,mBAAmB,CAAC,MAAM,CAAC,CAAC;aAC7B;iBAAM;gBACL,+CAA+C,CAAC,IAAI,CAAC,CAAC;aACvD;YAED,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAChC;aAAM;YACL,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,+CAA+C,CAAC,IAAI,CAAC,CAAC;SACvD;KACF;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;IACjE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,iCAAiC;QACxC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,iCAAiC,CAAU,CAAM;IACxD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAgD;IACvG,MAAM,UAAU,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO;KAGsB;IAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;IAE3B,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAChD,WAAW,CACT,WAAW,EACX;QACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,+CAA+C,CAAC,UAAU,CAAC,CAAC;SAC7D;KACF,EACD,CAAC;QACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,6CAA6C,CAAC,UAAgD;IACrG,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAClF,OAAO,IAAI,CAAC;KACb;IAED,MAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAChD;IAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,8CAA8C,CAAC,UAAgD;IACtG,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;IACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;IACzC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;AACjD,CAAC;AAED;SAEgB,oCAAoC,CAAC,UAAgD;IACnG,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO;KACR;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;IAElC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAC3D,mBAAmB,CAAC,MAAM,CAAC,CAAC;KAC7B;AACH,CAAC;SAEe,sCAAsC,CACpD,UAA8C,EAC9C,KAAQ;IAER,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO;KACR;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAClF,gCAAgC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACxD;SAAM;QACL,IAAI,SAAS,CAAC;QACd,IAAI;YACF,SAAS,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACtD;QAAC,OAAO,UAAU,EAAE;YACnB,oCAAoC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7D,MAAM,UAAU,CAAC;SAClB;QAED,IAAI;YACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACpD;QAAC,OAAO,QAAQ,EAAE;YACjB,oCAAoC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,CAAC;SAChB;KACF;IAED,+CAA+C,CAAC,UAAU,CAAC,CAAC;AAC9D,CAAC;SAEe,oCAAoC,CAAC,UAAgD,EAAE,CAAM;IAC3G,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO;KACR;IAED,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;SAEe,6CAA6C,CAC3D,UAAgD;IAEhD,MAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAE1D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;AAED;SACgB,8CAA8C,CAC5D,UAAgD;IAEhD,IAAI,6CAA6C,CAAC,UAAU,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,gDAAgD,CAC9D,UAAgD;IAEhD,MAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,KAAK,UAAU,EAAE;QACvD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,aAA6C;IAGnG,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAE9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;IAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC5B,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;IAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAE9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;IAE9C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;QACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;QAE/B,+CAA+C,CAAC,UAAU,CAAC,CAAC;KAC7D,EACD,CAAC;QACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;AACJ,CAAC;SAEe,wDAAwD,CACtE,MAAyB,EACzB,gBAA8C,EAC9C,aAAqB,EACrB,aAA6C;IAE7C,MAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAEhH,IAAI,cAAc,GAAmC,MAAM,SAAS,CAAC;IACrE,IAAI,aAAa,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9E,IAAI,eAAe,GAAmC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE3F,IAAI,gBAAgB,CAAC,KAAK,KAAK,SAAS,EAAE;QACxC,cAAc,GAAG,MAAM,gBAAgB,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;KAC5D;IACD,IAAI,gBAAgB,CAAC,IAAI,KAAK,SAAS,EAAE;QACvC,aAAa,GAAG,MAAM,gBAAgB,CAAC,IAAK,CAAC,UAAU,CAAC,CAAC;KAC1D;IACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE;QACzC,eAAe,GAAG,MAAM,IAAI,gBAAgB,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC;KAC9D;IAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;AACJ,CAAC;AAED;AAEA,SAASE,sCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,6CAA6C,IAAI,wDAAwD,CAAC,CAAC;AAC/G;;SCtWgB,iBAAiB,CAAI,MAAyB,EACzB,eAAwB;IAG3D,IAAI,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;QACpE,OAAO,qBAAqB,CAAC,MAAuC,CACjB,CAAC;KACrD;IACD,OAAO,wBAAwB,CAAC,MAAuB,CAAC,CAAC;AAC3D,CAAC;SAEe,wBAAwB,CAAI,MAAyB,EACzB,eAAwB;IAIlE,MAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAE7D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAY,CAAC;IACjB,IAAI,OAAY,CAAC;IACjB,IAAI,OAA0B,CAAC;IAC/B,IAAI,OAA0B,CAAC;IAE/B,IAAI,oBAAqE,CAAC;IAC1E,MAAM,aAAa,GAAG,UAAU,CAAY,OAAO;QACjD,oBAAoB,GAAG,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,SAAS,aAAa;QACpB,IAAI,OAAO,EAAE;YACX,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,MAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,MAAM,MAAM,GAAG,KAAK,CAAC;;;;;;oBAQrB,IAAI,CAAC,SAAS,EAAE;wBACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;qBACH;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;qBACH;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,SAAS,EAAE;wBACb,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;oBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;iBAC/G;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;iBAC/G;gBAED,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAErD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,cAAc;;KAEtB;IAED,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAChF,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAEhF,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAM;QAC1C,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;QACjH,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;YAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACjC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;SAEe,qBAAqB,CAAC,MAA0B;IAI9D,IAAI,MAAM,GAAqC,kCAAkC,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAY,CAAC;IACjB,IAAI,OAAY,CAAC;IACjB,IAAI,OAA2B,CAAC;IAChC,IAAI,OAA2B,CAAC;IAEhC,IAAI,oBAAqE,CAAC;IAC1E,MAAM,aAAa,GAAG,UAAU,CAAO,OAAO;QAC5C,oBAAoB,GAAG,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,SAAS,kBAAkB,CAAC,UAA4C;QACtE,aAAa,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,OAAO;aACR;YACD,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACxE,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;aACjC;SACF,CAAC,CAAC;KACJ;IAED,SAAS,qBAAqB;QAC5B,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;YAEtC,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;YACpD,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,MAAM,WAAW,GAA4B;YAC3C,WAAW,EAAE,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,mBAAmB,GAAG,KAAK,CAAC;oBAC5B,mBAAmB,GAAG,KAAK,CAAC;oBAE5B,MAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,IAAI,MAAM,GAAG,KAAK,CAAC;oBACnB,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;wBAC5B,IAAI;4BACF,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;yBACnC;wBAAC,OAAO,MAAM,EAAE;4BACf,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAC7E,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAC7E,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;4BAC3D,OAAO;yBACR;qBACF;oBAED,IAAI,CAAC,SAAS,EAAE;wBACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;qBAChF;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;qBAChF;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,mBAAmB,EAAE;wBACvB,cAAc,EAAE,CAAC;qBAClB;yBAAM,IAAI,mBAAmB,EAAE;wBAC9B,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;oBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;iBACtE;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;iBACtE;gBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;iBAC3E;gBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;iBAC3E;gBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;KACtD;IAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,UAAmB;QACpE,IAAI,6BAA6B,CAAa,MAAM,CAAC,EAAE;YAErD,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;YACjD,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QAClD,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QAEnD,MAAM,eAAe,GAAqC;YACxD,WAAW,EAAE,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,mBAAmB,GAAG,KAAK,CAAC;oBAC5B,mBAAmB,GAAG,KAAK,CAAC;oBAE5B,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBACxD,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBAEzD,IAAI,CAAC,aAAa,EAAE;wBAClB,IAAI,WAAW,CAAC;wBAChB,IAAI;4BACF,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;yBACxC;wBAAC,OAAO,MAAM,EAAE;4BACf,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAChF,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BACjF,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;4BAC3D,OAAO;yBACR;wBACD,IAAI,CAAC,YAAY,EAAE;4BACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;yBAC7F;wBACD,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;qBACzF;yBAAM,IAAI,CAAC,YAAY,EAAE;wBACxB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC7F;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,mBAAmB,EAAE;wBACvB,cAAc,EAAE,CAAC;qBAClB;yBAAM,IAAI,mBAAmB,EAAE;wBAC9B,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE,KAAK;gBAChB,OAAO,GAAG,KAAK,CAAC;gBAEhB,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;gBACxD,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;gBAEzD,IAAI,CAAC,YAAY,EAAE;oBACjB,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;iBACzE;gBACD,IAAI,CAAC,aAAa,EAAE;oBAClB,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;iBAC1E;gBAED,IAAI,KAAK,KAAK,SAAS,EAAE;oBAGvB,IAAI,CAAC,YAAY,EAAE;wBACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC7F;oBACD,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxF,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;qBAC/E;iBACF;gBAED,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;oBACnC,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,4BAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;KAC7D;IAED,SAAS,cAAc;QACrB,IAAI,OAAO,EAAE;YACX,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,MAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAClG,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,qBAAqB,EAAE,CAAC;SACzB;aAAM;YACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,KAAK,CAAC,CAAC;SAC/C;QAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,cAAc;QACrB,IAAI,OAAO,EAAE;YACX,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,MAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAClG,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,qBAAqB,EAAE,CAAC;SACzB;aAAM;YACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC;SAC9C;QAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,cAAc;QACrB,OAAO;KACR;IAED,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACrF,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAErF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B;;SCvagB,oCAAoC,CAClD,MAAyD,EACzD,OAAe;IAEf,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAmD,CAAC;IACrE,MAAM,qBAAqB,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,CAAC;IAC9D,MAAM,MAAM,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC;IAChC,MAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,OAAO;QACL,qBAAqB,EAAE,qBAAqB,KAAK,SAAS;YACxD,SAAS;YACT,uCAAuC,CACrC,qBAAqB,EACrB,GAAG,OAAO,0CAA0C,CACrD;QACH,MAAM,EAAE,MAAM,KAAK,SAAS;YAC1B,SAAS;YACT,qCAAqC,CAAC,MAAM,EAAE,QAAS,EAAE,GAAG,OAAO,2BAA2B,CAAC;QACjG,IAAI,EAAE,IAAI,KAAK,SAAS;YACtB,SAAS;YACT,mCAAmC,CAAC,IAAI,EAAE,QAAS,EAAE,GAAG,OAAO,yBAAyB,CAAC;QAC3F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,oCAAoC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QAC9F,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,IAAI,EAAE,GAAG,OAAO,yBAAyB,CAAC;KAC5G,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAC5C,EAAkC,EAClC,QAAuC,EACvC,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAW,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,mCAAmC,CAC1C,EAAgD,EAChD,QAA0C,EAC1C,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,UAAuC,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,oCAAoC,CAC3C,EAAiD,EACjD,QAA0C,EAC1C,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,UAAuC,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,OAAe;IAC9D,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;IACjB,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,KAAK,IAAI,2DAA2D,CAAC,CAAC;KACrG;IACD,OAAO,IAAI,CAAC;AACd;;SC1EgB,oBAAoB,CAAC,OAA0D,EAC1D,OAAe;IAClD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,+BAA+B,CAAC,IAAI,EAAE,GAAG,OAAO,yBAAyB,CAAC;KAClH,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAY,EAAE,OAAe;IACpE,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;IACjB,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,KAAK,IAAI,iEAAiE,CAAC,CAAC;KAC3G;IACD,OAAO,IAAI,CAAC;AACd;;SCZgB,sBAAsB,CAAC,OAAyD,EACzD,OAAe;IACpD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;AACnD;;SCPgB,kBAAkB,CAAC,OAA6C,EAC7C,OAAe;IAChD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;IAC3C,MAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,MAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,iBAAiB,CAAC,MAAM,EAAE,GAAG,OAAO,2BAA2B,CAAC,CAAC;KAClE;IACD,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;QACrC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,OAAe;IACzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,yBAAyB,CAAC,CAAC;KAC1D;AACH;;SCpBgB,2BAA2B,CACzC,IAAuD,EACvD,OAAe;IAEf,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;IAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAClE,oBAAoB,CAAC,QAAQ,EAAE,GAAG,OAAO,6BAA6B,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;IAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAClE,oBAAoB,CAAC,QAAQ,EAAE,GAAG,OAAO,6BAA6B,CAAC,CAAC;IAExE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC;;ACiDA;;;;;MAKa,cAAc;IAczB,YAAY,sBAAqF,EAAE,EACvF,cAAqD,EAAE;QACjE,IAAI,mBAAmB,KAAK,SAAS,EAAE;YACrC,mBAAmB,GAAG,IAAI,CAAC;SAC5B;aAAM;YACL,YAAY,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;SACtD;QAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,oCAAoC,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAEtG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE;YACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;aACpF;YACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,qDAAqD,CACnD,IAAqC,EACrC,gBAAgB,EAChB,aAAa,CACd,CAAC;SACH;aAAM;YAEL,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,wDAAwD,CACtD,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,aAAa,CACd,CAAC;SACH;KACF;;;;IAKD,IAAI,MAAM;QACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMD,2BAAyB,CAAC,QAAQ,CAAC,CAAC;SAC3C;QAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACrC;;;;;;;IAQD,MAAM,CAAC,SAAc,SAAS;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC,CAAC;SAC/F;QAED,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC3C;IAqBD,SAAS,CACP,aAAgE,SAAS;QAEzE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;SAC9C;QAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAEpE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAGlB;QAChC,OAAO,+BAA+B,CAAC,IAAqC,CAAC,CAAC;KAC/E;IAaD,WAAW,CACT,YAA8E,EAC9E,aAAmD,EAAE;QAErD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,aAAa,CAAC,CAAC;SAChD;QACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAEvD,MAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAEnE,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;SACvG;QACD,IAAI,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9C,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;SACvG;QAED,MAAM,OAAO,GAAG,oBAAoB,CAClC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAC5G,CAAC;QAEF,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,SAAS,CAAC,QAAQ,CAAC;KAC3B;IAUD,MAAM,CAAC,WAAiD,EACjD,aAAmD,EAAE;QAC1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;SACpE;QACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;YAClC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QAED,IAAI,OAAmC,CAAC;QACxC,IAAI;YACF,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;SAC9D;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QACD,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE;YACvC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QAED,OAAO,oBAAoB,CACzB,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CACrG,CAAC;KACH;;;;;;;;;;;;IAaD,GAAG;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,KAAK,CAAC,CAAC;SACxC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAW,CAAC,CAAC;QAChD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;KACtC;IAcD,MAAM,CAAC,aAA+D,SAAS;QAC7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,QAAQ,CAAC,CAAC;SAC3C;QAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtE,OAAO,kCAAkC,CAAI,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAC3E;CAMF;AAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;IAChD,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACzB,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAClE,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AACD,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;IAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,aAAa,EAAE;QACpE,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM;QACtC,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAkBD;AAEA;SACgB,oBAAoB,CAAI,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAa,GAAG,CAAC,EACjB,gBAAgD,MAAM,CAAC;IAG7F,MAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAChH,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;SACgB,wBAAwB,CACtC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C;IAE/C,MAAM,MAAM,GAAuB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACvG,iCAAiC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAEpH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAsB;IACtD,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,CAAC;SAEe,gBAAgB,CAAC,CAAU;IACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,cAAc,CAAC;AACrC,CAAC;SAQe,sBAAsB,CAAC,MAAsB;IAG3D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;SAEgB,oBAAoB,CAAI,MAAyB,EAAE,MAAW;IAC5E,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC/B,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjD;IAED,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe;YAC9C,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC9C;IAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAClF,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;SAEe,mBAAmB,CAAI,MAAyB;IAG9D,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO;KACR;IAED,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;QAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW;YACtC,WAAW,CAAC,WAAW,EAAE,CAAC;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KAC1C;AACH,CAAC;SAEe,mBAAmB,CAAI,MAAyB,EAAE,CAAM;IAItE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IAExB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO;KACR;IAED,gCAAgC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE5C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;QAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW;YACtC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KAC1C;SAAM;QAGL,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe;YAC9C,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC9C;AACH,CAAC;AAmBD;AAEA,SAASC,2BAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAAC,4BAA4B,IAAI,uCAAuC,CAAC,CAAC;AAChG;;SCjhBgB,0BAA0B,CAAC,IAA4C,EAC5C,OAAe;IACxD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;IAC1C,mBAAmB,CAAC,aAAa,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC3E,OAAO;QACL,aAAa,EAAE,yBAAyB,CAAC,aAAa,CAAC;KACxD,CAAC;AACJ;;ACNA;AACA,MAAM,sBAAsB,GAAG,CAAC,KAAsB;IACpD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC,CAAC;AACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAE,MAAM,EAAE;IACpD,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH;;;;;MAKqB,yBAAyB;IAI5C,YAAY,OAA4B;QACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAChE,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,uCAAuC,GAAG,OAAO,CAAC,aAAa,CAAC;KACtE;;;;IAKD,IAAI,aAAa;QACf,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,6BAA6B,CAAC,eAAe,CAAC,CAAC;SACtD;QACD,OAAO,IAAI,CAAC,uCAAuC,CAAC;KACrD;;;;IAKD,IAAI,IAAI;QACN,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,6BAA6B,CAAC,MAAM,CAAC,CAAC;SAC7C;QACD,OAAO,sBAAsB,CAAC;KAC/B;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;IAC3D,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC7E,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,IAAI,SAAS,CAAC,uCAAuC,IAAI,kDAAkD,CAAC,CAAC;AACtH,CAAC;SAEe,2BAA2B,CAAC,CAAM;IAChD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;QACvF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;AAChD;;ACxEA;AACA,MAAM,iBAAiB,GAAG;IACxB,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AACF,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEH;;;;;MAKqB,oBAAoB;IAIvC,YAAY,OAA4B;QACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC3D,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,kCAAkC,GAAG,OAAO,CAAC,aAAa,CAAC;KACjE;;;;IAKD,IAAI,aAAa;QACf,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;YACjC,MAAM,wBAAwB,CAAC,eAAe,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC,kCAAkC,CAAC;KAChD;;;;;IAMD,IAAI,IAAI;QACN,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;YACjC,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;SACxC;QACD,OAAO,iBAAiB,CAAC;KAC1B;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,EAAE;IACtD,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACxE,KAAK,EAAE,sBAAsB;QAC7B,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,wBAAwB,CAAC,IAAY;IAC5C,OAAO,IAAI,SAAS,CAAC,kCAAkC,IAAI,6CAA6C,CAAC,CAAC;AAC5G,CAAC;SAEe,sBAAsB,CAAC,CAAM;IAC3C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,EAAE;QAClF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,oBAAoB,CAAC;AAC3C;;SCnEgB,kBAAkB,CAAO,QAAkC,EAClC,OAAe;IACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,MAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,MAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,CAAC;IACtC,MAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QACzF,YAAY;QACZ,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;QACzF,SAAS,EAAE,SAAS,KAAK,SAAS;YAChC,SAAS;YACT,mCAAmC,CAAC,SAAS,EAAE,QAAS,EAAE,GAAG,OAAO,8BAA8B,CAAC;QACrG,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,UAA+C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,UAA+C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,mCAAmC,CAC1C,EAAsC,EACtC,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAQ,EAAE,UAA+C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACvH;;ACjCA;AAEA;;;;;;;;MAQa,eAAe;IAmB1B,YAAY,iBAAuD,EAAE,EACzD,sBAA6D,EAAE,EAC/D,sBAA6D,EAAE;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,cAAc,GAAG,IAAI,CAAC;SACvB;QAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QACzF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAExF,MAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;SACxD;QACD,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;SACxD;QAED,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QACrE,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAErE,IAAI,oBAAgE,CAAC;QACrE,MAAM,YAAY,GAAG,UAAU,CAAO,OAAO;YAC3C,oBAAoB,GAAG,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,yBAAyB,CACvB,IAAI,EAAE,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,CAC/G,CAAC;QACF,oDAAoD,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExE,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;YACnC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;SAC1E;aAAM;YACL,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACjC;KACF;;;;IAKD,IAAI,QAAQ;QACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;;;IAKD,IAAI,QAAQ;QACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE;IACjD,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC9B,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC/B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnE,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAwCD,SAAS,yBAAyB,CAAO,MAA6B,EAC7B,YAA2B,EAC3B,qBAA6B,EAC7B,qBAAqD,EACrD,qBAA6B,EAC7B,qBAAqD;IAC5F,SAAS,cAAc;QACrB,OAAO,YAAY,CAAC;KACrB;IAED,SAAS,cAAc,CAAC,KAAQ;QAC9B,OAAO,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,SAAS,cAAc,CAAC,MAAW;QACjC,OAAO,wCAAwC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjE;IAED,SAAS,cAAc;QACrB,OAAO,wCAAwC,CAAC,MAAM,CAAC,CAAC;KACzD;IAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAC9D,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAEtF,SAAS,aAAa;QACpB,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;KAC1D;IAED,SAAS,eAAe,CAAC,MAAW;QAClC,2CAA2C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EACrE,qBAAqB,CAAC,CAAC;;IAG/D,MAAM,CAAC,aAAa,GAAG,SAAU,CAAC;IAClC,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;IAC/C,MAAM,CAAC,kCAAkC,GAAG,SAAU,CAAC;IACvD,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;QAC1E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,eAAe,CAAC;AACtC,CAAC;AAED;AACA,SAAS,oBAAoB,CAAC,MAAuB,EAAE,CAAM;IAC3D,oCAAoC,CAClC,MAAM,CAAC,SAAS,CAAC,yBAAiE,EAClF,CAAC,CACF,CAAC;IACF,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAuB,EAAE,CAAM;IAClF,+CAA+C,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnF,4CAA4C,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC5F,IAAI,MAAM,CAAC,aAAa,EAAE;;;;QAIxB,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC/C;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAuB,EAAE,YAAqB;;IAIpF,IAAI,MAAM,CAAC,0BAA0B,KAAK,SAAS,EAAE;QACnD,MAAM,CAAC,kCAAkC,EAAE,CAAC;KAC7C;IAED,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC,OAAO;QACpD,MAAM,CAAC,kCAAkC,GAAG,OAAO,CAAC;KACrD,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,CAAC;AAED;AAEA;;;;;MAKa,gCAAgC;IAQ3C;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;;;;IAKD,IAAI,WAAW;QACb,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,aAAa,CAAC,CAAC;SAC3D;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,yBAAyB,CAAC;QAC/F,OAAO,6CAA6C,CAAC,kBAAwD,CAAC,CAAC;KAChH;IAMD,OAAO,CAAC,QAAW,SAAU;QAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,SAAS,CAAC,CAAC;SACvD;QAED,uCAAuC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtD;;;;;IAMD,KAAK,CAAC,SAAc,SAAS;QAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACrD;;;;;IAMD,SAAS;QACP,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,WAAW,CAAC,CAAC;SACzD;QAED,yCAAyC,CAAC,IAAI,CAAC,CAAC;KACjD;CACF;AAED,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,SAAS,EAAE;IAClE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,gCAAgC,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACpF,KAAK,EAAE,kCAAkC;QACzC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,kCAAkC,CAAU,CAAM;IACzD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;QAC1E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,gCAAgC,CAAC;AACvD,CAAC;AAED,SAAS,qCAAqC,CAAO,MAA6B,EAC7B,UAA+C,EAC/C,kBAA+C,EAC/C,cAAmC;IAItF,UAAU,CAAC,0BAA0B,GAAG,MAAM,CAAC;IAC/C,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC;IAE/C,UAAU,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;IACpD,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;AAC9C,CAAC;AAED,SAAS,oDAAoD,CAAO,MAA6B,EAC7B,WAAuC;IACzG,MAAM,UAAU,GAAwC,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;IAElH,IAAI,kBAAkB,GAAG,CAAC,KAAQ;QAChC,IAAI;YACF,uCAAuC,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;YAC3E,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAAC,OAAO,gBAAgB,EAAE;YACzB,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;SAC9C;KACF,CAAC;IAEF,IAAI,cAAc,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE/E,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE;QACvC,kBAAkB,GAAG,KAAK,IAAI,WAAW,CAAC,SAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;KACzE;IACD,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;QACnC,cAAc,GAAG,MAAM,WAAW,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;KACvD;IAED,qCAAqC,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAiD;IACxG,UAAU,CAAC,mBAAmB,GAAG,SAAU,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;AAC1C,CAAC;AAED,SAAS,uCAAuC,CAAI,UAA+C,EAAE,KAAQ;IAC3G,MAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IACrD,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;IAC5G,IAAI,CAAC,gDAAgD,CAAC,kBAAkB,CAAC,EAAE;QACzE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;KAC7E;;;IAKD,IAAI;QACF,sCAAsC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;KACnE;IAAC,OAAO,CAAC,EAAE;;QAEV,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;KACrC;IAED,MAAM,YAAY,GAAG,8CAA8C,CAAC,kBAAkB,CAAC,CAAC;IACxF,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;QAEzC,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC9C;AACH,CAAC;AAED,SAAS,qCAAqC,CAAC,UAAiD,EAAE,CAAM;IACtG,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,gDAAgD,CAAO,UAA+C,EAC/C,KAAQ;IACtE,MAAM,gBAAgB,GAAG,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;QACxD,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC;KACT,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yCAAyC,CAAI,UAA+C;IACnG,MAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IACrD,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;IAE5G,oCAAoC,CAAC,kBAAkB,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC1D,2CAA2C,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;AAEA,SAAS,wCAAwC,CAAO,MAA6B,EAAE,KAAQ;IAG7F,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;IAErD,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,MAAM,yBAAyB,GAAG,MAAM,CAAC,0BAA0B,CACnB;QAChD,OAAO,oBAAoB,CAAC,yBAAyB,EAAE;YACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,MAAM,QAAQ,CAAC,YAAY,CAAC;aAED;YAC7B,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;SAClF,CAAC,CAAC;KACJ;IAED,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAuB,EAAE,MAAW;;;IAGpF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,wCAAwC,CAAO,MAA6B;;IAEnF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAElC,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;IACrD,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,+CAA+C,CAAC,UAAU,CAAC,CAAC;;IAG5D,OAAO,oBAAoB,CAAC,YAAY,EAAE;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;YACjC,MAAM,QAAQ,CAAC,YAAY,CAAC;SAC7B;QACD,oCAAoC,CAAC,QAAQ,CAAC,yBAA+D,CAAC,CAAC;KAChH,EAAE,CAAC;QACF,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,QAAQ,CAAC,YAAY,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED;AAEA,SAAS,yCAAyC,CAAC,MAAuB;;IAMxE,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;IAG9C,OAAO,MAAM,CAAC,0BAA0B,CAAC;AAC3C,CAAC;AAED;AAEA,SAAS,oCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,8CAA8C,IAAI,yDAAyD,CAAC,CAAC;AACjH,CAAC;AAED;AAEA,SAAS,yBAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAClB,6BAA6B,IAAI,wCAAwC,CAAC,CAAC;AAC/E;;;;"} \ No newline at end of file +{"version":3,"file":"ponyfill.es2018.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es2018/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator {}).prototype);\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es6.js b/node_modules/web-streams-polyfill/dist/ponyfill.es6.js index 4d7bf37..338e6fe 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es6.js +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es6.js @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -3713,10 +3713,16 @@ const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; - Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3775,10 +3781,16 @@ const countSizeFunction = () => { return 1; }; - Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map b/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map index b7f4169..f2b0fdc 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map @@ -1 +1 @@ -{"version":3,"file":"ponyfill.es6.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ponyfill.es6.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs b/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs index e87d9ed..84a6a3a 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ /// const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? @@ -3707,10 +3707,16 @@ function convertQueuingStrategyInit(init, context) { const byteLengthSizeFunction = (chunk) => { return chunk.byteLength; }; -Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3769,10 +3775,16 @@ function IsByteLengthQueuingStrategy(x) { const countSizeFunction = () => { return 1; }; -Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map b/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map index 54aa5aa..fd8b762 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map +++ b/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map @@ -1 +1 @@ -{"version":3,"file":"ponyfill.es6.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ponyfill.es6.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.js b/node_modules/web-streams-polyfill/dist/ponyfill.js index cd97eaa..96cb3ab 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.js +++ b/node_modules/web-streams-polyfill/dist/ponyfill.js @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -3806,10 +3806,16 @@ var byteLengthSizeFunction = function (chunk) { return chunk.byteLength; }; - Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3877,10 +3883,16 @@ var countSizeFunction = function () { return 1; }; - Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true - }); + try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); + } + catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility + } /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.js.map b/node_modules/web-streams-polyfill/dist/ponyfill.js.map index cd9c9b2..87baccc 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.js.map +++ b/node_modules/web-streams-polyfill/dist/ponyfill.js.map @@ -1 +1 @@ -{"version":3,"file":"ponyfill.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ponyfill.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.mjs b/node_modules/web-streams-polyfill/dist/ponyfill.mjs index 00db626..43820d6 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.mjs +++ b/node_modules/web-streams-polyfill/dist/ponyfill.mjs @@ -1,5 +1,5 @@ /** - * web-streams-polyfill v3.2.0 + * web-streams-polyfill v3.2.1 */ /// var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? @@ -3800,10 +3800,16 @@ function convertQueuingStrategyInit(init, context) { var byteLengthSizeFunction = function (chunk) { return chunk.byteLength; }; -Object.defineProperty(byteLengthSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(byteLengthSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of bytes in each chunk. * @@ -3871,10 +3877,16 @@ function IsByteLengthQueuingStrategy(x) { var countSizeFunction = function () { return 1; }; -Object.defineProperty(countSizeFunction, 'name', { - value: 'size', - configurable: true -}); +try { + Object.defineProperty(countSizeFunction, 'name', { + value: 'size', + configurable: true + }); +} +catch (_a) { + // This property is non-configurable in older browsers, so ignore if this throws. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility +} /** * A queuing strategy that counts the number of chunks. * diff --git a/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map b/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map index 3db48bc..2d74a3a 100644 --- a/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map +++ b/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map @@ -1 +1 @@ -{"version":3,"file":"ponyfill.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nObject.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nObject.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n});\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ponyfill.mjs","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/readable-stream.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts"],"sourcesContent":["/// \n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// \n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise(executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void\n) => void): Promise {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith(value: T | PromiseLike): Promise {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith(reason: any): Promise {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen(\n promise: Promise,\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: any) => TResult2 | PromiseLike): Promise {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise;\n}\n\nexport function uponPromise(\n promise: Promise,\n onFulfilled?: (value: T) => void | PromiseLike,\n onRejected?: (reason: any) => void | PromiseLike): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment(promise: Promise, onFulfilled: (value: T) => void | PromiseLike): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise, onRejected: (reason: any) => void | PromiseLike): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith(\n promise: Promise,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike): Promise {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall(F: (this: T, ...fnArgs: A) => R | PromiseLike,\n V: T,\n args: A): Promise {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node {\n _elements: T[];\n _next: Node | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue {\n private _front: Node;\n private _back: Node;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize(reader: ReadableStreamReader, stream: ReadableStream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader, reason: any): Promise {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader(stream: ReadableStream): ReadableStreamDefaultReader {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest(stream: ReadableStream,\n readRequest: ReadRequest): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest(stream: ReadableStream, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests(stream: ReadableStream): number {\n return (stream._reader as ReadableStreamDefaultReader)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader {\n /** @internal */\n _ownerReadableStream!: ReadableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue>;\n\n constructor(stream: ReadableStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader(x: any): x is ReadableStreamDefaultReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead(reader: ReadableStreamDefaultReader,\n readRequest: ReadRequest): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// \n\nexport let AsyncIteratorPrototype: AsyncIterable | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// \n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator extends AsyncIterator {\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl {\n private readonly _reader: ReadableStreamDefaultReader;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance implements ReadableStreamAsyncIterator {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl;\n\n next(): Promise>;\n\n return(value?: any): Promise>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance = {\n next(this: ReadableStreamAsyncIteratorInstance): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance, value: any): Promise> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator(stream: ReadableStream,\n preventCancel: boolean): ReadableStreamAsyncIterator {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator(x: any): x is ReadableStreamAsyncIterator {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// \n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer {\n _queue: SimpleQueue;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair {\n value: T;\n size: number;\n}\n\nexport function DequeueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize(container: QueueContainer>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue(container: QueueContainer>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue(container: QueueContainer) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(\n pullIntoDescriptor: PullIntoDescriptor\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view: T): Promise> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm(strategy: QueuingStrategy): QueuingStrategySizeCallback {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy(init: QueuingStrategy | null | undefined,\n context: string): QueuingStrategy {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize(fn: QueuingStrategySizeCallback,\n context: string): QueuingStrategySizeCallback {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink(original: UnderlyingSink | null,\n context: string): ValidatedUnderlyingSink {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback(\n fn: UnderlyingSinkWriteCallback,\n original: UnderlyingSink,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController;\n /** @internal */\n _writeRequests!: SimpleQueue;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSink: UnderlyingSink | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter(stream: WritableStream): WritableStreamDefaultWriter {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream(stream: WritableStream) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream): Promise {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter {\n /** @internal */\n _ownerWritableStream: WritableStream;\n /** @internal */\n _closedPromise!: Promise;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise;\n write(chunk: W = undefined!): Promise {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter(x: any): x is WritableStreamDefaultWriter {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite(writer: WritableStreamDefaultWriter, chunk: W): Promise {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController {\n /** @internal */\n _controlledWritableStream!: WritableStream;\n /** @internal */\n _queue!: SimpleQueue>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise;\n /** @internal */\n _closeAlgorithm!: () => Promise;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController(stream: WritableStream,\n controller: WritableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n writeAlgorithm: (chunk: W) => Promise,\n closeAlgorithm: () => Promise,\n abortAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream: WritableStream,\n underlyingSink: ValidatedUnderlyingSink,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose(controller: WritableStreamDefaultController) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize(controller: WritableStreamDefaultController,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite(controller: WritableStreamDefaultController,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite(controller: WritableStreamDefaultController, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// \nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// \nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo(source: ReadableStream,\n dest: WritableStream,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController {\n /** @internal */\n _controlledReadableStream!: ReadableStream;\n /** @internal */\n _queue!: SimpleQueue>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController(x: any): x is ReadableStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue(\n controller: ReadableStreamDefaultController,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController(stream: ReadableStream,\n controller: ReadableStreamDefaultController,\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n stream: ReadableStream,\n underlyingSource: ValidatedUnderlyingSource,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback\n) {\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike = () => undefined;\n let pullAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream, ReadableStream];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee(stream: ReadableStream,\n cloneForBranch2: boolean): [ReadableStream, ReadableStream] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream;\n let branch2: ReadableStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise) => void;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource(\n source: UnderlyingSource | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback(\n fn: UnderlyingDefaultOrByteSourcePullCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (controller: ReadableStreamController) => Promise {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback(\n fn: UnderlyingDefaultOrByteSourceStartCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback {\n assertFunction(fn, context);\n return (controller: ReadableStreamController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy);\n constructor(rawUnderlyingSource: UnderlyingSource | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough(\n transform: { readable: RS; writable: WritableStream },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough(\n rawTransform: { readable: RS; writable: WritableStream } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise;\n pipeTo(destination: WritableStream | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream, ReadableStream] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream(startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback = () => 1): ReadableStream {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike,\n pullAlgorithm: () => Promise,\n cancelAlgorithm: (reason: any) => Promise\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel(stream: ReadableStream, reason: any): Promise {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose(stream: ReadableStream): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError(stream: ReadableStream, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer(original: Transformer | null,\n context: string): ValidatedTransformer {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback(\n fn: TransformerFlushCallback,\n original: Transformer,\n context: string\n): (controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback(\n fn: TransformerStartCallback,\n original: Transformer,\n context: string\n): TransformerStartCallback {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback(\n fn: TransformerTransformCallback,\n original: Transformer,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController) => Promise {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream {\n /** @internal */\n _writable!: WritableStream;\n /** @internal */\n _readable!: ReadableStream;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController;\n\n constructor(\n transformer?: Transformer,\n writableStrategy?: QueuingStrategy,\n readableStrategy?: QueuingStrategy\n );\n constructor(rawTransformer: Transformer | null | undefined = {},\n rawWritableStrategy: QueuingStrategy | null | undefined = {},\n rawReadableStrategy: QueuingStrategy | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream(startAlgorithm: () => void | PromiseLike,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike) => void;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream(stream: TransformStream,\n startPromise: Promise,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback) {\n function startAlgorithm(): Promise {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController {\n /** @internal */\n _controlledTransformStream: TransformStream;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise;\n /** @internal */\n _flushAlgorithm: () => Promise;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController(x: any): x is TransformStreamDefaultController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController(stream: TransformStream,\n controller: TransformStreamDefaultController,\n transformAlgorithm: (chunk: I) => Promise,\n flushAlgorithm: () => Promise) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream: TransformStream,\n transformer: ValidatedTransformer) {\n const controller: TransformStreamDefaultController = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue(controller: TransformStreamDefaultController, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform(controller: TransformStreamDefaultController,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate(controller: TransformStreamDefaultController) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream: TransformStream, chunk: I): Promise {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream: TransformStream): Promise {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n"],"names":["Symbol","streamBrandCheckException","defaultControllerBrandCheckException","DOMException"],"mappings":";;;AAAA;AAEA,IAAM,cAAc,GAClB,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;IACjE,MAAM;IACN,UAAA,WAAW,IAAI,OAAA,YAAU,WAAW,MAAoB,GAAA;;ACL5D;SAEgB,IAAI;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAC;KACf;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAEM,IAAM,OAAO,GAAG,UAAU,EAAE;;SCdnB,YAAY,CAAC,CAAM;IACjC,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1E,CAAC;AAEM,IAAM,8BAA8B,GAUrC,IAAI;;ACbV,IAAM,eAAe,GAAG,OAAO,CAAC;AAChC,IAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AACnD,IAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrE,IAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAEnD,UAAU,CAAI,QAGrB;IACP,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;SAEe,mBAAmB,CAAI,KAAyB;IAC9D,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;SAEe,mBAAmB,CAAY,MAAW;IACxD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;SAEe,kBAAkB,CAChC,OAAmB,EACnB,WAA4D,EAC5D,UAA8D;;;IAG9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAiC,CAAC;AACpG,CAAC;SAEe,WAAW,CACzB,OAAmB,EACnB,WAAoD,EACpD,UAAsD;IACtD,kBAAkB,CAChB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EACpD,SAAS,EACT,8BAA8B,CAC/B,CAAC;AACJ,CAAC;SAEe,eAAe,CAAI,OAAmB,EAAE,WAAmD;IACzG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACpC,CAAC;SAEe,aAAa,CAAC,OAAyB,EAAE,UAAqD;IAC5G,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;SAEe,oBAAoB,CAClC,OAAmB,EACnB,kBAAmE,EACnE,gBAAoE;IACpE,OAAO,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC;SAEe,yBAAyB,CAAC,OAAyB;IACjE,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,8BAA8B,CAAC,CAAC;AACzE,CAAC;AAEM,IAAM,cAAc,GAA6B,CAAC;IACvD,IAAM,oBAAoB,GAAG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAC/D,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE;QAC9C,OAAO,oBAAoB,CAAC;KAC7B;IAED,IAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,UAAC,EAAc,IAAK,OAAA,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC,GAAA,CAAC;AACrE,CAAC,GAAG,CAAC;SAEW,WAAW,CAAwB,CAA+B,EAAE,CAAI,EAAE,IAAO;IAC/F,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;KACnD;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;SAEe,WAAW,CAAwB,CAAgD,EAChD,CAAI,EACJ,IAAO;IAIxD,IAAI;QACF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KACrD;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;AACH;;ACzFA;AACA;AAEA,IAAM,oBAAoB,GAAG,KAAK,CAAC;AAOnC;;;;;;AAMA;IAME;QAHQ,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,CAAC,CAAC;;QAIhB,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;;;;QAIzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;;QAEjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChB;IAED,sBAAI,+BAAM;aAAV;YACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;OAAA;;;;;IAMD,0BAAI,GAAJ,UAAK,OAAU;QACb,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,GAAG,OAAO,CACe;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,oBAAoB,GAAG,CAAC,EAAE;YACzD,OAAO,GAAG;gBACR,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,SAAS;aACjB,CAAC;SACH;;;QAID,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;SACzB;QACD,EAAE,IAAI,CAAC,KAAK,CAAC;KACd;;;IAID,2BAAK,GAAL;QAGE,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAE9B,IAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,IAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,oBAAoB,EAAE;YAGtC,QAAQ,GAAG,QAAQ,CAAC,KAAM,CAAC;YAC3B,SAAS,GAAG,CAAC,CAAC;SACf;;QAGD,EAAE,IAAI,CAAC,KAAK,CAAC;QACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;SACxB;;QAGD,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAU,CAAC;QAEjC,OAAO,OAAO,CAAC;KAChB;;;;;;;;;IAUD,6BAAO,GAAP,UAAQ,QAA8B;QACpC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACrB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,OAAO,CAAC,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACxD,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;gBAGzB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;gBACnB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,CAAC,GAAG,CAAC,CAAC;gBACN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,MAAM;iBACP;aACF;YACD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,EAAE,CAAC,CAAC;SACL;KACF;;;IAID,0BAAI,GAAJ;QAGE,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAChC;IACH,kBAAC;AAAD,CAAC;;SCtIe,qCAAqC,CAAI,MAA+B,EAAE,MAAyB;IACjH,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IAExB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,oCAAoC,CAAC,MAAM,CAAC,CAAC;KAC9C;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QACrC,8CAA8C,CAAC,MAAM,CAAC,CAAC;KACxD;SAAM;QAGL,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;KAC7E;AACH,CAAC;AAED;AACA;SAEgB,iCAAiC,CAAC,MAAiC,EAAE,MAAW;IAC9F,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CACb;IAC7B,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;SAEe,kCAAkC,CAAC,MAAiC;IAIlF,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,UAAU,EAAE;QACrD,gCAAgC,CAC9B,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;KACtG;SAAM;QACL,yCAAyC,CACvC,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;KACtG;IAED,MAAM,CAAC,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;IAChD,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED;SAEgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;AAC/E,CAAC;AAED;SAEgB,oCAAoC,CAAC,MAAiC;IACpF,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;SAEe,8CAA8C,CAAC,MAAiC,EAAE,MAAW;IAC3G,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;SAEe,8CAA8C,CAAC,MAAiC;IAC9F,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;SAEe,gCAAgC,CAAC,MAAiC,EAAE,MAAW;IAC7F,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;SAEe,yCAAyC,CAAC,MAAiC,EAAE,MAAW;IAItG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;SAEe,iCAAiC,CAAC,MAAiC;IACjF,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;QAC/C,OAAO;KACR;IAED,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C;;ACjGO,IAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAM,WAAW,GAAGA,cAAM,CAAC,iBAAiB,CAAC,CAAC;AAC9C,IAAM,SAAS,GAAGA,cAAM,CAAC,eAAe,CAAC;;ACHhD;AAEA;AACA,IAAM,cAAc,GAA2B,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC3E,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACLD;AAEA;AACA,IAAM,SAAS,GAAsB,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;;ACFD;SACgB,YAAY,CAAC,CAAM;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1D,CAAC;SAEe,gBAAgB,CAAC,GAAY,EACZ,OAAe;IAC9C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QAC3C,MAAM,IAAI,SAAS,CAAI,OAAO,uBAAoB,CAAC,CAAC;KACrD;AACH,CAAC;AAID;SACgB,cAAc,CAAC,CAAU,EAAE,OAAe;IACxD,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CAAI,OAAO,wBAAqB,CAAC,CAAC;KACtD;AACH,CAAC;AAED;SACgB,QAAQ,CAAC,CAAM;IAC7B,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;AAC1E,CAAC;SAEe,YAAY,CAAC,CAAU,EACV,OAAe;IAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QAChB,MAAM,IAAI,SAAS,CAAI,OAAO,uBAAoB,CAAC,CAAC;KACrD;AACH,CAAC;SAEe,sBAAsB,CAAgB,CAAgB,EAChB,QAAgB,EAChB,OAAe;IACnE,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,SAAS,CAAC,eAAa,QAAQ,yBAAoB,OAAO,OAAI,CAAC,CAAC;KAC3E;AACH,CAAC;SAEe,mBAAmB,CAAgB,CAAgB,EAChB,KAAa,EACb,OAAe;IAChE,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,SAAS,CAAI,KAAK,yBAAoB,OAAO,OAAI,CAAC,CAAC;KAC9D;AACH,CAAC;AAED;SACgB,yBAAyB,CAAC,KAAc;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;SACgB,uCAAuC,CAAC,KAAc,EAAE,OAAe;IACrF,IAAM,UAAU,GAAG,CAAC,CAAC;IACrB,IAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAE3C,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,IAAI,SAAS,CAAI,OAAO,4BAAyB,CAAC,CAAC;KAC1D;IAED,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,UAAU,EAAE;QACpC,MAAM,IAAI,SAAS,CAAI,OAAO,0CAAqC,UAAU,YAAO,UAAU,gBAAa,CAAC,CAAC;KAC9G;IAED,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACjC,OAAO,CAAC,CAAC;KACV;;;;;IAOD,OAAO,CAAC,CAAC;AACX;;SC3FgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;IAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAI,OAAO,8BAA2B,CAAC,CAAC;KAC5D;AACH;;ACsBA;SAEgB,kCAAkC,CAAI,MAAsB;IAC1E,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;SAEgB,4BAA4B,CAAI,MAAyB,EACzB,WAA2B;IAIxE,MAAM,CAAC,OAA2C,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtF,CAAC;SAEe,gCAAgC,CAAI,MAAyB,EAAE,KAAoB,EAAE,IAAa;IAChH,IAAM,MAAM,GAAG,MAAM,CAAC,OAAyC,CAEvB;IAExC,IAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAG,CAAC;IAClD,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,WAAW,EAAE,CAAC;KAC3B;SAAM;QACL,WAAW,CAAC,WAAW,CAAC,KAAM,CAAC,CAAC;KACjC;AACH,CAAC;SAEe,gCAAgC,CAAI,MAAyB;IAC3E,OAAQ,MAAM,CAAC,OAA0C,CAAC,aAAa,CAAC,MAAM,CAAC;AACjF,CAAC;SAEe,8BAA8B,CAAC,MAAsB;IACnE,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE;QAC1C,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;IAiBE,qCAAY,MAAyB;QACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KACxC;IAMD,sBAAI,+CAAM;;;;;aAAV;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;aACxE;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;;;;IAKD,4CAAM,GAAN,UAAO,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC5B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACxD;;;;;;IAOD,0CAAI,GAAJ;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAC;SACtE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,cAAqE,CAAC;QAC1E,IAAI,aAAqC,CAAC;QAC1C,IAAM,OAAO,GAAG,UAAU,CAAqC,UAAC,OAAO,EAAE,MAAM;YAC7E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAA;YACnE,WAAW,EAAE,cAAM,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAA;YACnE,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,aAAa,CAAC,CAAC,CAAC,GAAA;SACnC,CAAC;QACF,+BAA+B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC;KAChB;;;;;;;;;;IAWD,iDAAW,GAAX;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;SAC5G;QAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IACH,kCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;IAC7D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC/E,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,6BAA6B,CAAU,CAAM;IAC3D,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;AAClD,CAAC;SAEe,+BAA+B,CAAI,MAAsC,EACtC,WAA2B;IAC5E,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,WAAW,CAAC,WAAW,EAAE,CAAC;KAC3B;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QACtC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC9C;SAAM;QAEL,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,WAA+B,CAAC,CAAC;KAC9E;AACH,CAAC;AAED;AAEA,SAAS,gCAAgC,CAAC,IAAY;IACpD,OAAO,IAAI,SAAS,CAClB,2CAAyC,IAAI,uDAAoD,CAAC,CAAC;AACvG;;ACvPA;;AAEO,IAAI,sBAAsD,CAAC;AAElE,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;;;IAG5C,sBAAsB;;;QAGpB,GAACA,cAAM,CAAC,aAAa,IAArB;YACE,OAAO,IAAI,CAAC;SACb;WACF,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAEA,cAAM,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;;;ACd7F;AAqCA;IAME,yCAAY,MAAsC,EAAE,aAAsB;QAHlE,oBAAe,GAA4D,SAAS,CAAC;QACrF,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;KACrC;IAED,8CAAI,GAAJ;QAAA,iBAMC;QALC,IAAM,SAAS,GAAG,cAAM,OAAA,KAAI,CAAC,UAAU,EAAE,GAAA,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;YACzC,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;YAChE,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAED,gDAAM,GAAN,UAAO,KAAU;QAAjB,iBAKC;QAJC,IAAM,WAAW,GAAG,cAAM,OAAA,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAA,CAAC;QACnD,OAAO,IAAI,CAAC,eAAe;YACzB,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC;YACpE,WAAW,EAAE,CAAC;KACjB;IAEO,oDAAU,GAAlB;QAAA,iBAsCC;QArCC,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;SAC5D;QAED,IAAI,cAAqE,CAAC;QAC1E,IAAI,aAAqC,CAAC;QAC1C,IAAM,OAAO,GAAG,UAAU,CAAqC,UAAC,OAAO,EAAE,MAAM;YAC7E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,UAAA,KAAK;gBAChB,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC;;;gBAGjC,cAAc,CAAC,cAAM,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAA,CAAC,CAAC;aACrE;YACD,WAAW,EAAE;gBACX,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD;YACD,WAAW,EAAE,UAAA,MAAM;gBACjB,KAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,aAAa,CAAC,MAAM,CAAC,CAAC;aACvB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;KAChB;IAEO,sDAAY,GAApB,UAAqB,KAAU;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;SAG5B;QAE1C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAChE,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,oBAAoB,CAAC,MAAM,EAAE,cAAM,QAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAE,IAAC,CAAC,CAAC;SACpE;QAED,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,mBAAmB,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACnD;IACH,sCAAC;AAAD,CAAC,IAAA;AAWD,IAAM,oCAAoC,GAA6C;IACrF,IAAI,EAAJ;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC,CAAC;SAC5E;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KACvC;IAED,MAAM,EAAN,UAAuD,KAAU;QAC/D,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC9E;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9C;CACK,CAAC;AACT,IAAI,sBAAsB,KAAK,SAAS,EAAE;IACxC,MAAM,CAAC,cAAc,CAAC,oCAAoC,EAAE,sBAAsB,CAAC,CAAC;CACrF;AAED;SAEgB,kCAAkC,CAAI,MAAyB,EACzB,aAAsB;IAC1E,IAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAC7D,IAAM,IAAI,GAAG,IAAI,+BAA+B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxE,IAAM,QAAQ,GAA2C,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC7G,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAU,CAAM;IACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KACd;IAED,IAAI;;QAEF,OAAQ,CAA8C,CAAC,kBAAkB;YACvE,+BAA+B,CAAC;KACnC;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED;AAEA,SAAS,sCAAsC,CAAC,IAAY;IAC1D,OAAO,IAAI,SAAS,CAAC,iCAA+B,IAAI,sDAAmD,CAAC,CAAC;AAC/G;;AC5LA;AAEA;AACA,IAAM,WAAW,GAAwB,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;;IAElE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;;SCNe,mBAAmB,CAAkB,QAAW;;;IAG9D,OAAO,QAAQ,CAAC,KAAK,EAAO,CAAC;AAC/B,CAAC;SAEe,kBAAkB,CAAC,IAAiB,EACjB,UAAkB,EAClB,GAAgB,EAChB,SAAiB,EACjB,CAAS;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED;SACgB,mBAAmB,CAA4B,CAAI;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAQD;AACA;SACgB,gBAAgB,CAAC,CAAkB;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,gBAAgB,CAAC,MAAuB,EAAE,KAAa,EAAE,GAAW;;;IAGlF,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACjC;IACD,IAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;IAC3B,IAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf;;SCtCgB,mBAAmB,CAAC,CAAS;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,iBAAiB,CAAC,CAAkB;IAClD,IAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACrF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC;;SCRgB,YAAY,CAAI,SAAuC;IAIrE,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC;IACvC,IAAI,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE;QACjC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;KAC/B;IAED,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;SAEe,oBAAoB,CAAI,SAAuC,EAAE,KAAQ,EAAE,IAAY;IAGrG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE;QACnD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;KAC9E;IAED,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;IACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC;AACpC,CAAC;SAEe,cAAc,CAAI,SAAuC;IAIvE,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;SAEe,UAAU,CAAI,SAA4B;IAGxD,SAAS,CAAC,MAAM,GAAG,IAAI,WAAW,EAAK,CAAC;IACxC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;AAChC;;ACdA;;;;;;IAWE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAKD,sBAAI,2CAAI;;;;aAAR;YACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;aAC9C;YAED,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;OAAA;IAUD,2CAAO,GAAP,UAAQ,YAAgC;QACtC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,SAAS,CAAC,CAAC;SACjD;QACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,YAAY,GAAG,uCAAuC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;YAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;SAC/D;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAM,CAAC,EAAE,CAKA;QAE1C,mCAAmC,CAAC,IAAI,CAAC,uCAAuC,EAAE,YAAY,CAAC,CAAC;KACjG;IAUD,sDAAkB,GAAlB,UAAmB,IAAiC;QAClD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;SAC5D;QACD,sBAAsB,CAAC,IAAI,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;YAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;SAC/D;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;QAED,8CAA8C,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;KACpG;IACH,gCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;IAC3D,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACxC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC7E,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAyCD;;;;;;IAiCE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAKD,sBAAI,qDAAW;;;;aAAf;YACE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;aAC9D;YAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;SACzD;;;OAAA;IAMD,sBAAI,qDAAW;;;;;aAAf;YACE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;aAC9D;YAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;SACzD;;;OAAA;;;;;IAMD,4CAAK,GAAL;QACE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;SACnF;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,oBAAkB,KAAK,8DAA2D,CAAC,CAAC;SACzG;QAED,iCAAiC,CAAC,IAAI,CAAC,CAAC;KACzC;IAOD,8CAAO,GAAP,UAAQ,KAAkC;QACxC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,SAAS,CAAC,CAAC;SAC1D;QAED,sBAAsB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;SAC3D;QACD,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;SAC5D;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;SACrD;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,oBAAkB,KAAK,mEAAgE,CAAC,CAAC;SAC9G;QAED,mCAAmC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAClD;;;;IAKD,4CAAK,GAAL,UAAM,CAAkB;QAAlB,kBAAA,EAAA,aAAkB;QACtB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,iCAAiC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC5C;;IAGD,uCAAC,WAAW,CAAC,GAAb,UAAc,MAAW;QACvB,iDAAiD,CAAC,IAAI,CAAC,CAAC;QAExD,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,2CAA2C,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;KACf;;IAGD,uCAAC,SAAS,CAAC,GAAX,UAAY,WAAoC;QAC9C,IAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,CACF;QAE/C,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YAG5B,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;YACnC,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;YAEzC,4CAA4C,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAE9E,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;SACR;QAED,IAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC1D,IAAI,qBAAqB,KAAK,SAAS,EAAE;YACvC,IAAI,MAAM,SAAa,CAAC;YACxB,IAAI;gBACF,MAAM,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;aACjD;YAAC,OAAO,OAAO,EAAE;gBAChB,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO;aACR;YAED,IAAM,kBAAkB,GAA8B;gBACpD,MAAM,QAAA;gBACN,gBAAgB,EAAE,qBAAqB;gBACvC,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,qBAAqB;gBACjC,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,eAAe,EAAE,UAAU;gBAC3B,UAAU,EAAE,SAAS;aACtB,CAAC;YAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACjD;QAED,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,4CAA4C,CAAC,IAAI,CAAC,CAAC;KACpD;IACH,mCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,SAAS,EAAE;IAC9D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAChF,KAAK,EAAE,8BAA8B;QACrC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,8BAA8B,CAAC,CAAM;IACnD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,EAAE;QAC7E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,4BAA4B,CAAC;AACnD,CAAC;AAED,SAAS,2BAA2B,CAAC,CAAM;IACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;QACvF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;AAChD,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAwC;IAC5F,IAAM,UAAU,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO;KAGsB;IAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;;IAG3B,IAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAChD,WAAW,CACT,WAAW,EACX;QACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,4CAA4C,CAAC,UAAU,CAAC,CAAC;SAC1D;KACF,EACD,UAAA,CAAC;QACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KAClD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iDAAiD,CAAC,UAAwC;IACjG,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAC9D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,oDAAoD,CAC3D,MAA0B,EAC1B,kBAAyC;IAIzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAE9B,IAAI,GAAG,IAAI,CAAC;KACb;IAED,IAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;IAChG,IAAI,kBAAkB,CAAC,UAAU,KAAK,SAAS,EAAE;QAC/C,gCAAgC,CAAC,MAAM,EAAE,UAAmC,EAAE,IAAI,CAAC,CAAC;KACrF;SAAM;QAEL,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,qDAAqD,CAC5D,kBAAyC;IAEzC,IAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACnD,IAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAGV;IAExC,OAAO,IAAI,kBAAkB,CAAC,eAAe,CAC3C,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAM,CAAC;AAC9F,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAwC,EACxC,MAAuB,EACvB,UAAkB,EAClB,UAAkB;IACzE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,QAAA,EAAE,UAAU,YAAA,EAAE,UAAU,YAAA,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC;AAC3C,CAAC;AAED,SAAS,2DAA2D,CAAC,UAAwC,EACxC,kBAAsC;IACzG,IAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IAEnD,IAAM,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;IAE1G,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAC1B,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChG,IAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,GAAG,cAAc,CAAC;IACvE,IAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC;IAEtE,IAAI,yBAAyB,GAAG,cAAc,CAAC;IAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,eAAe,GAAG,mBAAmB,EAAE;QACzC,yBAAyB,GAAG,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAC7E,KAAK,GAAG,IAAI,CAAC;KACd;IAED,IAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;IAEhC,OAAO,yBAAyB,GAAG,CAAC,EAAE;QACpC,IAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;QAEhF,IAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;QACjF,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAElH,IAAI,WAAW,CAAC,UAAU,KAAK,WAAW,EAAE;YAC1C,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;aAAM;YACL,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;YACtC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;SACvC;QACD,UAAU,CAAC,eAAe,IAAI,WAAW,CAAC;QAE1C,sDAAsD,CAAC,UAAU,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAEpG,yBAAyB,IAAI,WAAW,CAAC;KAC1C;IAQD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sDAAsD,CAAC,UAAwC,EACxC,IAAY,EACZ,kBAAsC;IAGpG,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAwC;IAG5F,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE;QAClE,2CAA2C,CAAC,UAAU,CAAC,CAAC;QACxD,mBAAmB,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;KAC/D;SAAM;QACL,4CAA4C,CAAC,UAAU,CAAC,CAAC;KAC1D;AACH,CAAC;AAED,SAAS,iDAAiD,CAAC,UAAwC;IACjG,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE;QACpC,OAAO;KACR;IAED,UAAU,CAAC,YAAY,CAAC,uCAAuC,GAAG,SAAU,CAAC;IAC7E,UAAU,CAAC,YAAY,CAAC,KAAK,GAAG,IAAK,CAAC;IACtC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,gEAAgE,CAAC,UAAwC;IAGhH,OAAO,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9C,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,EAAE;YACpC,OAAO;SACR;QAED,IAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAE/D,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;YAC/F,gDAAgD,CAAC,UAAU,CAAC,CAAC;YAE7D,oDAAoD,CAClD,UAAU,CAAC,6BAA6B,EACxC,kBAAkB,CACnB,CAAC;SACH;KACF;AACH,CAAC;SAEe,oCAAoC,CAClD,UAAwC,EACxC,IAAO,EACP,eAAmC;IAEnC,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;QACjC,WAAW,GAAI,IAAI,CAAC,WAA6C,CAAC,iBAAiB,CAAC;KACrF;IAED,IAAM,IAAI,GAAG,IAAI,CAAC,WAA4C,CAAC;;IAG/D,IAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;;;IAMhD,IAAM,kBAAkB,GAA8B;QACpD,MAAM,QAAA;QACN,gBAAgB,EAAE,MAAM,CAAC,UAAU;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,CAAC;QACd,WAAW,aAAA;QACX,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,MAAM;KACnB,CAAC;IAEF,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;;;;QAMtD,gCAAgC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,IAAM,SAAS,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACxF,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;QAClC,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;YAC/F,IAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;YAEhG,4CAA4C,CAAC,UAAU,CAAC,CAAC;YAEzD,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO;SACR;QAED,IAAI,UAAU,CAAC,eAAe,EAAE;YAC9B,IAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;YACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEjD,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO;SACR;KACF;IAED,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEtD,gCAAgC,CAAI,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7D,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gDAAgD,CAAC,UAAwC,EACxC,eAAmC;IAG3F,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IACxD,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;QACvC,OAAO,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACvD,IAAM,kBAAkB,GAAG,gDAAgD,CAAC,UAAU,CAAC,CAAC;YACxF,oDAAoD,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;SAClF;KACF;AACH,CAAC;AAED,SAAS,kDAAkD,CAAC,UAAwC,EACxC,YAAoB,EACpB,kBAAsC;IAGhG,sDAAsD,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAErG,IAAI,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,EAAE;QACnE,OAAO;KACR;IAED,gDAAgD,CAAC,UAAU,CAAC,CAAC;IAE7D,IAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACtF,IAAI,aAAa,GAAG,CAAC,EAAE;QACrB,IAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAC3E,IAAM,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC;QACxF,+CAA+C,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;KACjG;IAED,kBAAkB,CAAC,WAAW,IAAI,aAAa,CAAC;IAChD,oDAAoD,CAAC,UAAU,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;IAEnH,gEAAgE,CAAC,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAwC,EAAE,YAAoB;IACjH,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CACJ;IAEvD,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QAEtB,gDAAgD,CAAC,UAA2B,CAAC,CAAC;KAC/E;SAAM;QAGL,kDAAkD,CAAC,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;KAC/F;IAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gDAAgD,CACvD,UAAwC;IAGxC,IAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;IACzD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,0CAA0C,CAAC,UAAwC;IAC1F,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,IAAI,UAAU,CAAC,eAAe,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,8BAA8B,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC1F,OAAO,IAAI,CAAC;KACb;IAED,IAAI,2BAA2B,CAAC,MAAM,CAAC,IAAI,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC3F,OAAO,IAAI,CAAC;KACb;IAED,IAAM,WAAW,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAC7C;IAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAwC;IAC3F,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;IACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED;SAEgB,iCAAiC,CAAC,UAAwC;IACxF,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,OAAO;KACR;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;QAClC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QAElC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,IAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,oBAAoB,CAAC,WAAW,GAAG,CAAC,EAAE;YACxC,IAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;YACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEjD,MAAM,CAAC,CAAC;SACT;KACF;IAED,2CAA2C,CAAC,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;SAEe,mCAAmC,CAAC,UAAwC,EAAE,KAAsB;IAClH,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,OAAO;KACR;IAED,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IAIpC,IAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3C,IAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAIlD;QACD,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;KAChF;IAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,8BAA8B,CAAC,MAAM,CAAC,EAAE;QAC1C,IAAI,gCAAgC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAElD,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACxG;aAAM;YAEL,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAE3C,gDAAgD,CAAC,UAAU,CAAC,CAAC;aAC9D;YACD,IAAM,eAAe,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAClF,gCAAgC,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;SAClE;KACF;SAAM,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;;QAE9C,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACvG,gEAAgE,CAAC,UAAU,CAAC,CAAC;KAC9E;SAAM;QAEL,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;KACxG;IAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;SAEe,iCAAiC,CAAC,UAAwC,EAAE,CAAM;IAChG,IAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;IAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO;KACR;IAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;IAE9D,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,2CAA2C,CAAC,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;SAEe,0CAA0C,CACxD,UAAwC;IAExC,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/E,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,EACxD,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAEtF,IAAM,WAAW,GAA8B,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAClG,8BAA8B,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9D,UAAU,CAAC,YAAY,GAAG,WAAW,CAAC;KACvC;IACD,OAAO,UAAU,CAAC,YAAY,CAAC;AACjC,CAAC;AAED,SAAS,0CAA0C,CAAC,UAAwC;IAC1F,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;SAEe,mCAAmC,CAAC,UAAwC,EAAE,YAAoB;IAGhH,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,kEAAkE,CAAC,CAAC;SACzF;KACF;SAAM;QAEL,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;SACxG;QACD,IAAI,eAAe,CAAC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE;YAC3E,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;SACnD;KACF;IAED,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAErE,2CAA2C,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACxE,CAAC;SAEe,8CAA8C,CAAC,UAAwC,EACxC,IAAqB;IAIlF,IAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CAAC,mFAAmF,CAAC,CAAC;SAC1G;KACF;SAAM;QAEL,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CACjB,kGAAkG,CACnG,CAAC;SACH;KACF;IAED,IAAI,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU,EAAE;QAChF,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;KACjF;IACD,IAAI,eAAe,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QAC/D,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;KACpF;IACD,IAAI,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE;QAC9E,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;KACjF;IAED,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IACvC,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,2CAA2C,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC1E,CAAC;SAEe,iCAAiC,CAAC,MAA0B,EAC1B,UAAwC,EACxC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,qBAAyC;IAOzF,UAAU,CAAC,6BAA6B,GAAG,MAAM,CAAC;IAElD,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;;IAG/B,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IAC5D,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;IAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAE9C,UAAU,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;IAE1D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjD,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;IAE9C,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;QACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;QAE/B,4CAA4C,CAAC,UAAU,CAAC,CAAC;KAC1D,EACD,UAAA,CAAC;QACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KAClD,CACF,CAAC;AACJ,CAAC;SAEe,qDAAqD,CACnE,MAA0B,EAC1B,oBAAmD,EACnD,aAAqB;IAErB,IAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAEvG,IAAI,cAAc,GAAmC,cAAM,OAAA,SAAS,GAAA,CAAC;IACrE,IAAI,aAAa,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAC9E,IAAI,eAAe,GAAmC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE3F,IAAI,oBAAoB,CAAC,KAAK,KAAK,SAAS,EAAE;QAC5C,cAAc,GAAG,cAAM,OAAA,oBAAoB,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KAChE;IACD,IAAI,oBAAoB,CAAC,IAAI,KAAK,SAAS,EAAE;QAC3C,aAAa,GAAG,cAAM,OAAA,oBAAoB,CAAC,IAAK,CAAC,UAAU,CAAC,GAAA,CAAC;KAC9D;IACD,IAAI,oBAAoB,CAAC,MAAM,KAAK,SAAS,EAAE;QAC7C,eAAe,GAAG,UAAA,MAAM,IAAI,OAAA,oBAAoB,CAAC,MAAO,CAAC,MAAM,CAAC,GAAA,CAAC;KAClE;IAED,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;IACzE,IAAI,qBAAqB,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;KACrE;IAED,iCAAiC,CAC/B,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,CACzG,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAkC,EAClC,UAAwC,EACxC,IAAqB;IAK3D,OAAO,CAAC,uCAAuC,GAAG,UAAU,CAAC;IAC7D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;AAEA,SAAS,8BAA8B,CAAC,IAAY;IAClD,OAAO,IAAI,SAAS,CAClB,yCAAuC,IAAI,qDAAkD,CAAC,CAAC;AACnG,CAAC;AAED;AAEA,SAAS,uCAAuC,CAAC,IAAY;IAC3D,OAAO,IAAI,SAAS,CAClB,4CAA0C,IAAI,wDAAqD,CAAC,CAAC;AACzG;;ACv/BA;SAEgB,+BAA+B,CAAC,MAA0B;IACxE,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;SAEgB,gCAAgC,CAA4B,MAA0B,EAC1B,eAAmC;IAI5G,MAAM,CAAC,OAAqC,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxF,CAAC;SAEe,oCAAoC,CAAC,MAA0B,EAC1B,KAAsB,EACtB,IAAa;IAChE,IAAM,MAAM,GAAG,MAAM,CAAC,OAAmC,CAEb;IAE5C,IAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;IAC1D,IAAI,IAAI,EAAE;QACR,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpC;SAAM;QACL,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpC;AACH,CAAC;SAEe,oCAAoC,CAAC,MAA0B;IAC7E,OAAQ,MAAM,CAAC,OAAoC,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC/E,CAAC;SAEe,2BAA2B,CAAC,MAA0B;IACpE,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE;QACvC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;IAiBE,kCAAY,MAA0B;QACpC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAC9D,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;YACrE,MAAM,IAAI,SAAS,CAAC,uFAAuF;gBACzG,QAAQ,CAAC,CAAC;SACb;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC5C;IAMD,sBAAI,4CAAM;;;;;aAAV;YACE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;gBACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;aACrE;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;;;;IAKD,yCAAM,GAAN,UAAO,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC5B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACxD;;;;;;IAOD,uCAAI,GAAJ,UAAgC,IAAO;QACrC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;SAChF;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC,CAAC;SACjF;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC,CAAC;SAC1F;QACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,cAAkE,CAAC;QACvE,IAAI,aAAqC,CAAC;QAC1C,IAAM,OAAO,GAAG,UAAU,CAAkC,UAAC,OAAO,EAAE,MAAM;YAC1E,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,eAAe,GAAuB;YAC1C,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAA;YACnE,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAA;YAClE,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,aAAa,CAAC,CAAC,CAAC,GAAA;SACnC,CAAC;QACF,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;KAChB;;;;;;;;;;IAWD,8CAAW,GAAX;QACE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,6BAA6B,CAAC,aAAa,CAAC,CAAC;SACpD;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;SAC5G;QAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IACH,+BAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,SAAS,EAAE;IAC1D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC5E,KAAK,EAAE,0BAA0B;QACjC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;SAEgB,0BAA0B,CAAC,CAAM;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,wBAAwB,CAAC;AAC/C,CAAC;SAEe,4BAA4B,CAC1C,MAAgC,EAChC,IAAO,EACP,eAAmC;IAEnC,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC/B,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAClD;SAAM;QACL,oCAAoC,CAClC,MAAM,CAAC,yBAAyD,EAChE,IAAI,EACJ,eAAe,CAChB,CAAC;KACH;AACH,CAAC;AAED;AAEA,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,IAAI,SAAS,CAClB,wCAAsC,IAAI,oDAAiD,CAAC,CAAC;AACjG;;SCjRgB,oBAAoB,CAAC,QAAyB,EAAE,UAAkB;IACxE,IAAA,aAAa,GAAK,QAAQ,cAAb,CAAc;IAEnC,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO,UAAU,CAAC;KACnB;IAED,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;QACnD,MAAM,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC/C;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;SAEe,oBAAoB,CAAI,QAA4B;IAC1D,IAAA,IAAI,GAAK,QAAQ,KAAb,CAAc;IAE1B,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,cAAM,OAAA,CAAC,GAAA,CAAC;KAChB;IAED,OAAO,IAAI,CAAC;AACd;;SCtBgB,sBAAsB,CAAI,IAA2C,EAC3C,OAAe;IACvD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,IAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;IAC1C,IAAM,IAAI,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;IACxB,OAAO;QACL,aAAa,EAAE,aAAa,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACjG,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,0BAA0B,CAAC,IAAI,EAAK,OAAO,4BAAyB,CAAC;KAC7G,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAI,EAAkC,EAClC,OAAe;IACpD,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAA,KAAK,IAAI,OAAA,yBAAyB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAA,CAAC;AACvD;;SCNgB,qBAAqB,CAAI,QAAkC,EAClC,OAAe;IACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC5F,IAAI,MAAA;KACL,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,MAAW,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,GAAA,CAAC;AAC9D,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,cAAM,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAA,CAAC;AAC7C,CAAC;AAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAA2C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AAClG,CAAC;AAED,SAAS,kCAAkC,CACzC,EAAkC,EAClC,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,KAAQ,EAAE,UAA2C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,GAAA,CAAC;AACnH;;SCrEgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;IAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAI,OAAO,8BAA2B,CAAC,CAAC;KAC5D;AACH;;SCsBgB,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;QAC/C,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,OAAO,OAAQ,KAAqB,CAAC,OAAO,KAAK,SAAS,CAAC;KAC5D;IAAC,WAAM;;QAEN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAsBD,IAAM,uBAAuB,GAAG,OAAQ,eAAuB,KAAK,UAAU,CAAC;AAE/E;;;;;SAKgB,qBAAqB;IACnC,IAAI,uBAAuB,EAAE;QAC3B,OAAO,IAAK,eAA8C,EAAE,CAAC;KAC9D;IACD,OAAO,SAAS,CAAC;AACnB;;ACnBA;;;;;;IA4BE,wBAAY,iBAA4D,EAC5D,WAAuD;QADvD,kCAAA,EAAA,sBAA4D;QAC5D,4BAAA,EAAA,gBAAuD;QACjE,IAAI,iBAAiB,KAAK,SAAS,EAAE;YACnC,iBAAiB,GAAG,IAAI,CAAC;SAC1B;aAAM;YACL,YAAY,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;SACpD;QAED,IAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAM,cAAc,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAEnF,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;SACnD;QAED,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAExD,sDAAsD,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;KAC5G;IAKD,sBAAI,kCAAM;;;;aAAV;YACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMC,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;;;OAAA;;;;;;;;;;IAWD,8BAAK,GAAL,UAAM,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;SAC9F;QAED,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC1C;;;;;;;;;IAUD,8BAAK,GAAL;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;SAC9F;QAED,IAAI,mCAAmC,CAAC,IAAI,CAAC,EAAE;YAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;SACrF;QAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAClC;;;;;;;;;IAUD,kCAAS,GAAT;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;SAC9C;QAED,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;KACjD;IACH,qBAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;IAChD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAClE,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAqBD;AAEA,SAAS,kCAAkC,CAAI,MAAyB;IACtE,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;AACA,SAAS,oBAAoB,CAAI,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAiB,EACjB,aAAuD;IADvD,8BAAA,EAAA,iBAAiB;IACjB,8BAAA,EAAA,8BAAsD,OAAA,CAAC,GAAA,GAC3C;IAE3C,IAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAEhH,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAClE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAI,MAAyB;IAC5D,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;;;IAI3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAEhC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;;;IAI3B,MAAM,CAAC,yBAAyB,GAAG,SAAU,CAAC;;;IAI9C,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;;;IAI1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;;IAIzC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;;;IAIjC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;IAGzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;;IAGxC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU;IAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,cAAc,CAAC;AACrC,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAsB;IAGpD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAsB,EAAE,MAAW;;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC7D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,MAAM,CAAC,yBAAyB,CAAC,YAAY,GAAG,MAAM,CAAC;IACvD,MAAA,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,0CAAE,KAAK,EAAE,CAAC;;;;IAK3D,IAAM,KAAK,GAAG,MAAM,CAAC,MAA6B,CAAC;IAEnD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;QAC7C,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,OAAO,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC;KAGO;IAErD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,kBAAkB,GAAG,IAAI,CAAC;;QAE1B,MAAM,GAAG,SAAS,CAAC;KACpB;IAED,IAAM,OAAO,GAAG,UAAU,CAAY,UAAC,OAAO,EAAE,MAAM;QACpD,MAAM,CAAC,oBAAoB,GAAG;YAC5B,QAAQ,EAAE,SAAU;YACpB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;YACf,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;KACH,CAAC,CAAC;IACH,MAAM,CAAC,oBAAqB,CAAC,QAAQ,GAAG,OAAO,CAAC;IAEhD,IAAI,CAAC,kBAAkB,EAAE;QACvB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA2B;IACtD,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;QAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CACtC,oBAAkB,KAAK,8DAA2D,CAAC,CAAC,CAAC;KAIpC;IAErD,IAAM,OAAO,GAAG,UAAU,CAAY,UAAC,OAAO,EAAE,MAAM;QACpD,IAAM,YAAY,GAAiB;YACjC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;KACrC,CAAC,CAAC;IAEH,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,KAAK,UAAU,EAAE;QACxE,gCAAgC,CAAC,MAAM,CAAC,CAAC;KAC1C;IAED,oCAAoC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAEvE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;AAEA,SAAS,6BAA6B,CAAC,MAAsB;IAI3D,IAAM,OAAO,GAAG,UAAU,CAAY,UAAC,OAAO,EAAE,MAAM;QACpD,IAAM,YAAY,GAAiB;YACjC,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC1C,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,+BAA+B,CAAC,MAAsB,EAAE,KAAU;IACzE,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;KAGoB;IAC7B,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAsB,EAAE,MAAW;IAItE,IAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAClB;IAEjC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,qDAAqD,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvE;IAED,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE;QAC5E,4BAA4B,CAAC,MAAM,CAAC,CAAC;KACtC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAsB;IAG1D,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAAC;IAE/C,IAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,YAAY;QACxC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;IAE1C,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,iDAAiD,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACjD,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAExC,IAAI,YAAY,CAAC,mBAAmB,EAAE;QACpC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClC,iDAAiD,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO;KACR;IAED,IAAM,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACnF,WAAW,CACT,OAAO,EACP;QACE,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxB,iDAAiD,CAAC,MAAM,CAAC,CAAC;KAC3D,EACD,UAAC,MAAW;QACV,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,iDAAiD,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC,CAAC;AACP,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;AAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;IAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;IAErE,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAEzC,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAE0B;IAErD,IAAI,KAAK,KAAK,UAAU,EAAE;;QAExB,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACzC;KACF;IAED,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEzB,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,iCAAiC,CAAC,MAAM,CAAC,CAAC;KAIF;AAC5C,CAAC;AAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;IAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;;IAGrE,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;KACzC;IACD,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED;AACA,SAAS,mCAAmC,CAAC,MAAsB;IACjE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QACpF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAsB;IACtE,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC5F,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sCAAsC,CAAC,MAAsB;IAGpE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;IACpD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;AACnC,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAsB;IAGzE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,iDAAiD,CAAC,MAAsB;IAE/E,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;QAGtC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;KAClC;IACD,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;KAC/D;AACH,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAsB,EAAE,YAAqB;IAIrF,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;QACjE,IAAI,YAAY,EAAE;YAChB,8BAA8B,CAAC,MAAM,CAAC,CAAC;SACxC;aAAM;YAGL,gCAAgC,CAAC,MAAM,CAAC,CAAC;SAC1C;KACF;IAED,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,CAAC;AAED;;;;;;IAyBE,qCAAY,MAAyB;QACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;SACpG;QAED,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACnC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtB,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE;gBACxE,mCAAmC,CAAC,IAAI,CAAC,CAAC;aAC3C;iBAAM;gBACL,6CAA6C,CAAC,IAAI,CAAC,CAAC;aACrD;YAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;aAAM,IAAI,KAAK,KAAK,UAAU,EAAE;YAC/B,6CAA6C,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACzE,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;YAC7B,6CAA6C,CAAC,IAAI,CAAC,CAAC;YACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;SACtD;aAAM;YAGL,IAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,6CAA6C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACjE,8CAA8C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SACnE;KACF;IAMD,sBAAI,+CAAM;;;;;aAAV;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;aACxE;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;;;OAAA;IAUD,sBAAI,oDAAW;;;;;;;;;aAAf;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;aACvD;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,MAAM,0BAA0B,CAAC,aAAa,CAAC,CAAC;aACjD;YAED,OAAO,yCAAyC,CAAC,IAAI,CAAC,CAAC;SACxD;;;OAAA;IAUD,sBAAI,8CAAK;;;;;;;;;aAAT;YACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;aACvE;YAED,OAAO,IAAI,CAAC,aAAa,CAAC;SAC3B;;;OAAA;;;;IAKD,2CAAK,GAAL,UAAM,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC3B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACjE;QAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACvD;;;;IAKD,2CAAK,GAAL;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,mCAAmC,CAAC,MAAM,CAAC,EAAE;YAC/C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;SACrF;QAED,OAAO,gCAAgC,CAAC,IAAI,CAAC,CAAC;KAC/C;;;;;;;;;;;IAYD,iDAAW,GAAX;QACE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;SACvD;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO;SAG4B;QAErC,kCAAkC,CAAC,IAAI,CAAC,CAAC;KAC1C;IAYD,2CAAK,GAAL,UAAM,KAAqB;QAArB,sBAAA,EAAA,QAAW,SAAU;QACzB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;SACpE;QAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtD;IACH,kCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;IAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC/E,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,6BAA6B,CAAU,CAAM;IACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE;QACpE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;AAClD,CAAC;AAED;AAEA,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;IACxF,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC;IAC3E,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,oDAAoD,CAAC,MAAmC;IAC/F,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;QACrE,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAGG;IAErD,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,sDAAsD,CAAC,MAAmC,EAAE,KAAU;IAC7G,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE;QAC5C,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACjD;SAAM;QACL,yCAAyC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC1D;AACH,CAAC;AAED,SAAS,qDAAqD,CAAC,MAAmC,EAAE,KAAU;IAC5G,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE;QAC3C,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAChD;SAAM;QACL,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,CAAC;AAED,SAAS,yCAAyC,CAAC,MAAmC;IACpF,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAC3C,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE;QAC/C,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,6CAA6C,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAmC;IAC7E,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAER;IAElC,IAAM,aAAa,GAAG,IAAI,SAAS,CACjC,kFAAkF,CAAC,CAAC;IAEtF,qDAAqD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;;;IAI7E,sDAAsD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE9E,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;AAC3C,CAAC;AAED,SAAS,gCAAgC,CAAI,MAAsC,EAAE,KAAQ;IAC3F,IAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;IAE7B,IAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAEpD,IAAM,SAAS,GAAG,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAEjF,IAAI,MAAM,KAAK,MAAM,CAAC,oBAAoB,EAAE;QAC1C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;KACpE;IAED,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjD;IACD,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;QACrE,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;KACvG;IACD,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAGrB;IAE7B,IAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtD,oCAAoC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,IAAM,aAAa,GAAkB,EAAS,CAAC;AAI/C;;;;;;IA6BE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IASD,sBAAI,wDAAW;;;;;;;;aAAf;YACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAME,sCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YACD,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;OAAA;IAKD,sBAAI,mDAAM;;;;aAAV;YACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMA,sCAAoC,CAAC,QAAQ,CAAC,CAAC;aACtD;YACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;;;;gBAIvC,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;aAC1F;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;SACrC;;;OAAA;;;;;;;;IASD,+CAAK,GAAL,UAAM,CAAkB;QAAlB,kBAAA,EAAA,aAAkB;QACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QACpD,IAAI,KAAK,KAAK,UAAU,EAAE;;;YAGxB,OAAO;SACR;QAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC/C;;IAGD,0CAAC,UAAU,CAAC,GAAZ,UAAa,MAAW;QACtB,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,8CAA8C,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;;IAGD,0CAAC,UAAU,CAAC,GAAZ;QACE,UAAU,CAAC,IAAI,CAAC,CAAC;KAClB;IACH,sCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;IACjE,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC5B,CAAC,CAAC;AACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,iCAAiC;QACxC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,iCAAiC,CAAC,CAAM;IAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAqB,EACrB,aAA6C;IAI5F,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;;IAG9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;IAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;IACtD,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAE5C,IAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,IAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,WAAW,CACT,YAAY,EACZ;QAEE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,mDAAmD,CAAC,UAAU,CAAC,CAAC;KACjE,EACD,UAAA,CAAC;QAEC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC5C,CACF,CAAC;AACJ,CAAC;AAED,SAAS,sDAAsD,CAAI,MAAyB,EACzB,cAA0C,EAC1C,aAAqB,EACrB,aAA6C;IAC9G,IAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAE5E,IAAI,cAAc,GAAmC,cAAM,OAAA,SAAS,GAAA,CAAC;IACrE,IAAI,cAAc,GAAgC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IACvF,IAAI,cAAc,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAC/E,IAAI,cAAc,GAAmC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE1F,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,cAAM,OAAA,cAAc,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KAC1D;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,UAAA,KAAK,IAAI,OAAA,cAAc,CAAC,KAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAA,CAAC;KACpE;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,cAAM,OAAA,cAAc,CAAC,KAAM,EAAE,GAAA,CAAC;KAChD;IACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;QACtC,cAAc,GAAG,UAAA,MAAM,IAAI,OAAA,cAAc,CAAC,KAAM,CAAC,MAAM,CAAC,GAAA,CAAC;KAC1D;IAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CACjH,CAAC;AACJ,CAAC;AAED;AACA,SAAS,8CAA8C,CAAC,UAAgD;IACtG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;AACjD,CAAC;AAED,SAAS,oCAAoC,CAAI,UAA8C;IAC7F,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IACnD,mDAAmD,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,2CAA2C,CAAI,UAA8C,EAC9C,KAAQ;IAC9D,IAAI;QACF,OAAO,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;KACjD;IAAC,OAAO,UAAU,EAAE;QACnB,4CAA4C,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;KACV;AACH,CAAC;AAED,SAAS,6CAA6C,CAAC,UAAgD;IACrG,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;AAED,SAAS,oCAAoC,CAAI,UAA8C,EAC9C,KAAQ,EACR,SAAiB;IAChE,IAAI;QACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;KACpD;IAAC,OAAO,QAAQ,EAAE;QACjB,4CAA4C,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE,OAAO;KACR;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IACpD,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChF,IAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACxD;IAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED;AAEA,SAAS,mDAAmD,CAAI,UAA8C;IAC5G,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO;KACR;IAED,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACuB;IAClD,IAAI,KAAK,KAAK,UAAU,EAAE;QACxB,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO;KACR;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,OAAO;KACR;IAED,IAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,aAAa,EAAE;QAC3B,2CAA2C,CAAC,UAAU,CAAC,CAAC;KACzD;SAAM;QACL,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAChE;AACH,CAAC;AAED,SAAS,4CAA4C,CAAC,UAAgD,EAAE,KAAU;IAChH,IAAI,UAAU,CAAC,yBAAyB,CAAC,MAAM,KAAK,UAAU,EAAE;QAC9D,oCAAoC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,CAAC;AAED,SAAS,2CAA2C,CAAC,UAAgD;IACnG,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,sCAAsC,CAAC,MAAM,CAAC,CAAC;IAE/C,YAAY,CAAC,UAAU,CAAC,CACe;IAEvC,IAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IACtD,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,WAAW,CACT,gBAAgB,EAChB;QACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;KAC3C,EACD,UAAA,MAAM;QACJ,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,2CAA2C,CAAI,UAA8C,EAAE,KAAQ;IAC9G,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,2CAA2C,CAAC,MAAM,CAAC,CAAC;IAEpD,IAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,WAAW,CACT,gBAAgB,EAChB;QACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAC0B;QAErD,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE;YACxE,IAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;YAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SACxD;QAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;KACjE,EACD,UAAA,MAAM;QACJ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,8CAA8C,CAAC,UAAU,CAAC,CAAC;SAC5D;QACD,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,8CAA8C,CAAC,UAAgD;IACtG,IAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;IAC9E,OAAO,WAAW,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;AAEA,SAAS,oCAAoC,CAAC,UAAgD,EAAE,KAAU;IACxG,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAEd;IAErC,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;AAEA,SAASC,2BAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAAC,8BAA4B,IAAI,0CAAuC,CAAC,CAAC;AAChG,CAAC;AAED;AAEA,SAASC,sCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,+CAA6C,IAAI,2DAAwD,CAAC,CAAC;AAC/G,CAAC;AAGD;AAEA,SAAS,gCAAgC,CAAC,IAAY;IACpD,OAAO,IAAI,SAAS,CAClB,2CAAyC,IAAI,uDAAoD,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,oCAAoC,CAAC,MAAmC;IAC/E,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;QACtC,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,8CAA8C,CAAC,MAAmC,EAAE,MAAW;IACtG,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,8CAA8C,CAAC,MAAmC;IACzF,oCAAoC,CAAC,MAAM,CAAC,CAAC;IAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;IACxF,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KAEwC;IAEjD,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,yCAAyC,CAAC,MAAmC,EAAE,MAAW;IAKjG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAmC;IAC5E,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;QAC/C,OAAO;KAEwC;IAEjD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,mCAAmC,CAAC,MAAmC;IAC9E,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QAChD,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC;QACvC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;KACtC,CAAC,CAAC;IACH,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;AACxC,CAAC;AAED,SAAS,6CAA6C,CAAC,MAAmC,EAAE,MAAW;IACrG,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,6CAA6C,CAAC,MAAmC;IACxF,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC5C,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,+BAA+B,CAAC,MAAmC,EAAE,MAAW;IACvF,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;QAC7C,OAAO;KACR;IAED,yBAAyB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC;AACzC,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAmC;IAIzE,mCAAmC,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAmC,EAAE,MAAW;IAIhG,6CAA6C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAmC;IAC3E,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAC9C,OAAO;KACR;IAED,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;AAC1C;;ACj4CA;AACO,IAAM,kBAAkB,GAC7B,OAAO,YAAY,KAAK,WAAW,GAAG,YAAY,GAAG,SAAS;;ACFhE;AAaA,SAAS,yBAAyB,CAAC,IAAa;IAC9C,IAAI,EAAE,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IACD,IAAI;QACF,IAAK,IAAgC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;KACb;IAAC,WAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED,SAAS,0BAA0B;;IAEjC,IAAM,IAAI,GAAG,SAAS,YAAY,CAAqB,OAAgB,EAAE,IAAa;QACpF,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC;QAC5B,IAAI,KAAK,CAAC,iBAAiB,EAAE;YAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACjD;KACK,CAAC;IACT,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1G,OAAO,IAAI,CAAC;AACd,CAAC;AAED;AACA,IAAMC,cAAY,GAChB,yBAAyB,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,0BAA0B,EAAE;;SCbnF,oBAAoB,CAAI,MAAyB,EACzB,IAAuB,EACvB,YAAqB,EACrB,YAAqB,EACrB,aAAsB,EACtB,MAA+B;IAUrE,IAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAC7D,IAAM,MAAM,GAAG,kCAAkC,CAAI,IAAI,CAAC,CAAC;IAE3D,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,YAAY,GAAG,KAAK,CAAC;;IAGzB,IAAI,YAAY,GAAG,mBAAmB,CAAO,SAAS,CAAC,CAAC;IAExD,OAAO,UAAU,CAAC,UAAC,OAAO,EAAE,MAAM;QAChC,IAAI,cAA0B,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,cAAc,GAAG;gBACf,IAAM,KAAK,GAAG,IAAIA,cAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACxD,IAAM,OAAO,GAA+B,EAAE,CAAC;gBAC/C,IAAI,CAAC,YAAY,EAAE;oBACjB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;4BAC9B,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;yBACzC;wBACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBACvC,CAAC,CAAC;iBACJ;gBACD,IAAI,CAAC,aAAa,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;4BAChC,OAAO,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;yBAC5C;wBACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBACvC,CAAC,CAAC;iBACJ;gBACD,kBAAkB,CAAC,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,EAAE,GAAA,CAAC,CAAC,GAAA,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aACrF,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,cAAc,EAAE,CAAC;gBACjB,OAAO;aACR;YAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;SAClD;;;;QAKD,SAAS,QAAQ;YACf,OAAO,UAAU,CAAO,UAAC,WAAW,EAAE,UAAU;gBAC9C,SAAS,IAAI,CAAC,IAAa;oBACzB,IAAI,IAAI,EAAE;wBACR,WAAW,EAAE,CAAC;qBACf;yBAAM;;;wBAGL,kBAAkB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;qBAClD;iBACF;gBAED,IAAI,CAAC,KAAK,CAAC,CAAC;aACb,CAAC,CAAC;SACJ;QAED,SAAS,QAAQ;YACf,IAAI,YAAY,EAAE;gBAChB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;aAClC;YAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC9C,OAAO,UAAU,CAAU,UAAC,WAAW,EAAE,UAAU;oBACjD,+BAA+B,CAC7B,MAAM,EACN;wBACE,WAAW,EAAE,UAAA,KAAK;4BAChB,YAAY,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;4BACpG,WAAW,CAAC,KAAK,CAAC,CAAC;yBACpB;wBACD,WAAW,EAAE,cAAM,OAAA,WAAW,CAAC,IAAI,CAAC,GAAA;wBACpC,WAAW,EAAE,UAAU;qBACxB,CACF,CAAC;iBACH,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;;QAGD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,UAAA,WAAW;YAC3D,IAAI,CAAC,YAAY,EAAE;gBACjB,kBAAkB,CAAC,cAAM,OAAA,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,GAAA,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;aACrF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aAC7B;SACF,CAAC,CAAC;;QAGH,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE,UAAA,WAAW;YACzD,IAAI,CAAC,aAAa,EAAE;gBAClB,kBAAkB,CAAC,cAAM,OAAA,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,GAAA,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;aACxF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aAC7B;SACF,CAAC,CAAC;;QAGH,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE;YAC/C,IAAI,CAAC,YAAY,EAAE;gBACjB,kBAAkB,CAAC,cAAM,OAAA,oDAAoD,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;aACxF;iBAAM;gBACL,QAAQ,EAAE,CAAC;aACZ;SACF,CAAC,CAAC;;QAGH,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YACzE,IAAM,YAAU,GAAG,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;YAEhH,IAAI,CAAC,aAAa,EAAE;gBAClB,kBAAkB,CAAC,cAAM,OAAA,oBAAoB,CAAC,MAAM,EAAE,YAAU,CAAC,GAAA,EAAE,IAAI,EAAE,YAAU,CAAC,CAAC;aACtF;iBAAM;gBACL,QAAQ,CAAC,IAAI,EAAE,YAAU,CAAC,CAAC;aAC5B;SACF;QAED,yBAAyB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEtC,SAAS,qBAAqB;;;YAG5B,IAAM,eAAe,GAAG,YAAY,CAAC;YACrC,OAAO,kBAAkB,CACvB,YAAY,EACZ,cAAM,OAAA,eAAe,KAAK,YAAY,GAAG,qBAAqB,EAAE,GAAG,SAAS,GAAA,CAC7E,CAAC;SACH;QAED,SAAS,kBAAkB,CAAC,MAAuC,EACvC,OAAsB,EACtB,MAA6B;YACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC/B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAC7B;iBAAM;gBACL,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAChC;SACF;QAED,SAAS,iBAAiB,CAAC,MAAuC,EAAE,OAAsB,EAAE,MAAkB;YAC5G,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,EAAE,CAAC;aACV;iBAAM;gBACL,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAClC;SACF;QAED,SAAS,kBAAkB,CAAC,MAA8B,EAAE,eAAyB,EAAE,aAAmB;YACxG,IAAI,YAAY,EAAE;gBAChB,OAAO;aACR;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,SAAS,CAAC,CAAC;aACrD;iBAAM;gBACL,SAAS,EAAE,CAAC;aACb;YAED,SAAS,SAAS;gBAChB,WAAW,CACT,MAAM,EAAE,EACR,cAAM,OAAA,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,GAAA,EAC9C,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAA,CACrC,CAAC;aACH;SACF;QAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;YAC9C,IAAI,YAAY,EAAE;gBAChB,OAAO;aACR;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,cAAM,OAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,GAAA,CAAC,CAAC;aAC1E;iBAAM;gBACL,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC1B;SACF;QAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;YAC9C,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;aACrD;YACD,IAAI,OAAO,EAAE;gBACX,MAAM,CAAC,KAAK,CAAC,CAAC;aACf;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;SACF;KACF,CAAC,CAAC;AACL;;ACnOA;;;;;;IA6BE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAMD,sBAAI,wDAAW;;;;;aAAf;YACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMD,sCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YAED,OAAO,6CAA6C,CAAC,IAAI,CAAC,CAAC;SAC5D;;;OAAA;;;;;IAMD,+CAAK,GAAL;QACE,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;SACxE;QAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;KAC5C;IAMD,iDAAO,GAAP,UAAQ,KAAqB;QAArB,sBAAA,EAAA,QAAW,SAAU;QAC3B,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,SAAS,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;SAC1E;QAED,OAAO,sCAAsC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5D;;;;IAKD,+CAAK,GAAL,UAAM,CAAkB;QAAlB,kBAAA,EAAA,aAAkB;QACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC/C;;IAGD,0CAAC,WAAW,CAAC,GAAb,UAAc,MAAW;QACvB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,8CAA8C,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;KACf;;IAGD,0CAAC,SAAS,CAAC,GAAX,UAAY,WAA2B;QACrC,IAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;gBACrD,mBAAmB,CAAC,MAAM,CAAC,CAAC;aAC7B;iBAAM;gBACL,+CAA+C,CAAC,IAAI,CAAC,CAAC;aACvD;YAED,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAChC;aAAM;YACL,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,+CAA+C,CAAC,IAAI,CAAC,CAAC;SACvD;KACF;IACH,sCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;IACjE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,iCAAiC;QACxC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,iCAAiC,CAAU,CAAM;IACxD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAgD;IACvG,IAAM,UAAU,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,EAAE;QACf,OAAO;KACR;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,OAAO;KAGsB;IAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;IAE3B,IAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAChD,WAAW,CACT,WAAW,EACX;QACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;YAC9B,+CAA+C,CAAC,UAAU,CAAC,CAAC;SAC7D;KACF,EACD,UAAA,CAAC;QACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;AACJ,CAAC;AAED,SAAS,6CAA6C,CAAC,UAAgD;IACrG,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAClF,OAAO,IAAI,CAAC;KACb;IAED,IAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAChD;IAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,8CAA8C,CAAC,UAAgD;IACtG,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;IACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;IACzC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;AACjD,CAAC;AAED;SAEgB,oCAAoC,CAAC,UAAgD;IACnG,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO;KACR;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;IAElC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAC3D,mBAAmB,CAAC,MAAM,CAAC,CAAC;KAC7B;AACH,CAAC;SAEe,sCAAsC,CACpD,UAA8C,EAC9C,KAAQ;IAER,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;QACjE,OAAO;KACR;IAED,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAClF,gCAAgC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACxD;SAAM;QACL,IAAI,SAAS,SAAA,CAAC;QACd,IAAI;YACF,SAAS,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACtD;QAAC,OAAO,UAAU,EAAE;YACnB,oCAAoC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7D,MAAM,UAAU,CAAC;SAClB;QAED,IAAI;YACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACpD;QAAC,OAAO,QAAQ,EAAE;YACjB,oCAAoC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,CAAC;SAChB;KACF;IAED,+CAA+C,CAAC,UAAU,CAAC,CAAC;AAC9D,CAAC;SAEe,oCAAoC,CAAC,UAAgD,EAAE,CAAM;IAC3G,IAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;IAEpD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO;KACR;IAED,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,8CAA8C,CAAC,UAAU,CAAC,CAAC;IAC3D,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;SAEe,6CAA6C,CAC3D,UAAgD;IAEhD,IAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAE1D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9D,CAAC;AAED;SACgB,8CAA8C,CAC5D,UAAgD;IAEhD,IAAI,6CAA6C,CAAC,UAAU,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;SAEe,gDAAgD,CAC9D,UAAgD;IAEhD,IAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,KAAK,UAAU,EAAE;QACvD,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,aAA6C;IAGnG,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAE9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;IAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IACxC,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvB,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC5B,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;IAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;IAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAE9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;IAE9C,IAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;QACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;QAE/B,+CAA+C,CAAC,UAAU,CAAC,CAAC;KAC7D,EACD,UAAA,CAAC;QACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;AACJ,CAAC;SAEe,wDAAwD,CACtE,MAAyB,EACzB,gBAA8C,EAC9C,aAAqB,EACrB,aAA6C;IAE7C,IAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAEhH,IAAI,cAAc,GAAmC,cAAM,OAAA,SAAS,GAAA,CAAC;IACrE,IAAI,aAAa,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAC9E,IAAI,eAAe,GAAmC,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE3F,IAAI,gBAAgB,CAAC,KAAK,KAAK,SAAS,EAAE;QACxC,cAAc,GAAG,cAAM,OAAA,gBAAgB,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KAC5D;IACD,IAAI,gBAAgB,CAAC,IAAI,KAAK,SAAS,EAAE;QACvC,aAAa,GAAG,cAAM,OAAA,gBAAgB,CAAC,IAAK,CAAC,UAAU,CAAC,GAAA,CAAC;KAC1D;IACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE;QACzC,eAAe,GAAG,UAAA,MAAM,IAAI,OAAA,gBAAgB,CAAC,MAAO,CAAC,MAAM,CAAC,GAAA,CAAC;KAC9D;IAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;AACJ,CAAC;AAED;AAEA,SAASE,sCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,+CAA6C,IAAI,2DAAwD,CAAC,CAAC;AAC/G;;SCtWgB,iBAAiB,CAAI,MAAyB,EACzB,eAAwB;IAG3D,IAAI,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;QACpE,OAAO,qBAAqB,CAAC,MAAuC,CACjB,CAAC;KACrD;IACD,OAAO,wBAAwB,CAAC,MAAuB,CAAC,CAAC;AAC3D,CAAC;SAEe,wBAAwB,CAAI,MAAyB,EACzB,eAAwB;IAIlE,IAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;IAE7D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAY,CAAC;IACjB,IAAI,OAAY,CAAC;IACjB,IAAI,OAA0B,CAAC;IAC/B,IAAI,OAA0B,CAAC;IAE/B,IAAI,oBAAqE,CAAC;IAC1E,IAAM,aAAa,GAAG,UAAU,CAAY,UAAA,OAAO;QACjD,oBAAoB,GAAG,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,SAAS,aAAa;QACpB,IAAI,OAAO,EAAE;YACX,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,IAAM,WAAW,GAAmB;YAClC,WAAW,EAAE,UAAA,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,SAAS,GAAG,KAAK,CAAC;oBAClB,IAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,IAAM,MAAM,GAAG,KAAK,CAAC;;;;;;oBAQrB,IAAI,CAAC,SAAS,EAAE;wBACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;qBACH;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;qBACH;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,SAAS,EAAE;wBACb,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;oBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;iBAC/G;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;iBAC/G;gBAED,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAErD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,cAAc;;KAEtB;IAED,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAChF,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAEhF,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,UAAC,CAAM;QAC1C,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;QACjH,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;YAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACjC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;SAEe,qBAAqB,CAAC,MAA0B;IAI9D,IAAI,MAAM,GAAqC,kCAAkC,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAY,CAAC;IACjB,IAAI,OAAY,CAAC;IACjB,IAAI,OAA2B,CAAC;IAChC,IAAI,OAA2B,CAAC;IAEhC,IAAI,oBAAqE,CAAC;IAC1E,IAAM,aAAa,GAAG,UAAU,CAAO,UAAA,OAAO;QAC5C,oBAAoB,GAAG,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,SAAS,kBAAkB,CAAC,UAA4C;QACtE,aAAa,CAAC,UAAU,CAAC,cAAc,EAAE,UAAA,CAAC;YACxC,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,OAAO;aACR;YACD,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACxE,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;aACjC;SACF,CAAC,CAAC;KACJ;IAED,SAAS,qBAAqB;QAC5B,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;YAEtC,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;YACpD,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,IAAM,WAAW,GAA4B;YAC3C,WAAW,EAAE,UAAA,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,mBAAmB,GAAG,KAAK,CAAC;oBAC5B,mBAAmB,GAAG,KAAK,CAAC;oBAE5B,IAAM,MAAM,GAAG,KAAK,CAAC;oBACrB,IAAI,MAAM,GAAG,KAAK,CAAC;oBACnB,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;wBAC5B,IAAI;4BACF,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;yBACnC;wBAAC,OAAO,MAAM,EAAE;4BACf,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAC7E,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAC7E,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;4BAC3D,OAAO;yBACR;qBACF;oBAED,IAAI,CAAC,SAAS,EAAE;wBACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;qBAChF;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;qBAChF;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,mBAAmB,EAAE;wBACvB,cAAc,EAAE,CAAC;qBAClB;yBAAM,IAAI,mBAAmB,EAAE;wBAC9B,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;oBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;iBACtE;gBACD,IAAI,CAAC,SAAS,EAAE;oBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;iBACtE;gBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;iBAC3E;gBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;iBAC3E;gBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;KACtD;IAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,UAAmB;QACpE,IAAI,6BAA6B,CAAa,MAAM,CAAC,EAAE;YAErD,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;YACjD,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,IAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QAClD,IAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QAEnD,IAAM,eAAe,GAAqC;YACxD,WAAW,EAAE,UAAA,KAAK;;;;gBAIhB,cAAc,CAAC;oBACb,mBAAmB,GAAG,KAAK,CAAC;oBAC5B,mBAAmB,GAAG,KAAK,CAAC;oBAE5B,IAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBACxD,IAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBAEzD,IAAI,CAAC,aAAa,EAAE;wBAClB,IAAI,WAAW,SAAA,CAAC;wBAChB,IAAI;4BACF,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;yBACxC;wBAAC,OAAO,MAAM,EAAE;4BACf,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BAChF,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;4BACjF,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;4BAC3D,OAAO;yBACR;wBACD,IAAI,CAAC,YAAY,EAAE;4BACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;yBAC7F;wBACD,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;qBACzF;yBAAM,IAAI,CAAC,YAAY,EAAE;wBACxB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC7F;oBAED,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,mBAAmB,EAAE;wBACvB,cAAc,EAAE,CAAC;qBAClB;yBAAM,IAAI,mBAAmB,EAAE;wBAC9B,cAAc,EAAE,CAAC;qBAClB;iBACF,CAAC,CAAC;aACJ;YACD,WAAW,EAAE,UAAA,KAAK;gBAChB,OAAO,GAAG,KAAK,CAAC;gBAEhB,IAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;gBACxD,IAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;gBAEzD,IAAI,CAAC,YAAY,EAAE;oBACjB,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;iBACzE;gBACD,IAAI,CAAC,aAAa,EAAE;oBAClB,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;iBAC1E;gBAED,IAAI,KAAK,KAAK,SAAS,EAAE;oBAGvB,IAAI,CAAC,YAAY,EAAE;wBACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC7F;oBACD,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxF,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;qBAC/E;iBACF;gBAED,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;oBACnC,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;YACD,WAAW,EAAE;gBACX,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC;QACF,4BAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;KAC7D;IAED,SAAS,cAAc;QACrB,IAAI,OAAO,EAAE;YACX,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,IAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAClG,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,qBAAqB,EAAE,CAAC;SACzB;aAAM;YACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,KAAK,CAAC,CAAC;SAC/C;QAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,cAAc;QACrB,IAAI,OAAO,EAAE;YACX,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,OAAO,GAAG,IAAI,CAAC;QAEf,IAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAClG,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,qBAAqB,EAAE,CAAC;SACzB;aAAM;YACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC;SAC9C;QAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,gBAAgB,CAAC,MAAW;QACnC,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,SAAS,EAAE;YACb,IAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,IAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,OAAO,aAAa,CAAC;KACtB;IAED,SAAS,cAAc;QACrB,OAAO;KACR;IAED,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACrF,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAErF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B;;SCvagB,oCAAoC,CAClD,MAAyD,EACzD,OAAe;IAEf,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAM,QAAQ,GAAG,MAAmD,CAAC;IACrE,IAAM,qBAAqB,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,CAAC;IAC9D,IAAM,MAAM,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC;IAChC,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,OAAO;QACL,qBAAqB,EAAE,qBAAqB,KAAK,SAAS;YACxD,SAAS;YACT,uCAAuC,CACrC,qBAAqB,EAClB,OAAO,6CAA0C,CACrD;QACH,MAAM,EAAE,MAAM,KAAK,SAAS;YAC1B,SAAS;YACT,qCAAqC,CAAC,MAAM,EAAE,QAAS,EAAK,OAAO,8BAA2B,CAAC;QACjG,IAAI,EAAE,IAAI,KAAK,SAAS;YACtB,SAAS;YACT,mCAAmC,CAAC,IAAI,EAAE,QAAS,EAAK,OAAO,4BAAyB,CAAC;QAC3F,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,oCAAoC,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QAC9F,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,IAAI,EAAK,OAAO,4BAAyB,CAAC;KAC5G,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAC5C,EAAkC,EAClC,QAAuC,EACvC,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,MAAW,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,GAAA,CAAC;AAC9D,CAAC;AAED,SAAS,mCAAmC,CAC1C,EAAgD,EAChD,QAA0C,EAC1C,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAAuC,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AAC9F,CAAC;AAED,SAAS,oCAAoC,CAC3C,EAAiD,EACjD,QAA0C,EAC1C,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAAuC,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AAC9F,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,OAAe;IAC9D,IAAI,GAAG,KAAG,IAAM,CAAC;IACjB,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,MAAM,IAAI,SAAS,CAAI,OAAO,UAAK,IAAI,8DAA2D,CAAC,CAAC;KACrG;IACD,OAAO,IAAI,CAAC;AACd;;SC1EgB,oBAAoB,CAAC,OAA0D,EAC1D,OAAe;IAClD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,IAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,+BAA+B,CAAC,IAAI,EAAK,OAAO,4BAAyB,CAAC;KAClH,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAY,EAAE,OAAe;IACpE,IAAI,GAAG,KAAG,IAAM,CAAC;IACjB,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,MAAM,IAAI,SAAS,CAAI,OAAO,UAAK,IAAI,oEAAiE,CAAC,CAAC;KAC3G;IACD,OAAO,IAAI,CAAC;AACd;;SCZgB,sBAAsB,CAAC,OAAyD,EACzD,OAAe;IACpD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,IAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;AACnD;;SCPgB,kBAAkB,CAAC,OAA6C,EAC7C,OAAe;IAChD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,IAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;IAC3C,IAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,IAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;IAC3C,IAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,iBAAiB,CAAC,MAAM,EAAK,OAAO,8BAA2B,CAAC,CAAC;KAClE;IACD,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;QACrC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,MAAM,QAAA;KACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,OAAe;IACzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,IAAI,SAAS,CAAI,OAAO,4BAAyB,CAAC,CAAC;KAC1D;AACH;;SCpBgB,2BAA2B,CACzC,IAAuD,EACvD,OAAe;IAEf,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhC,IAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;IAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAClE,oBAAoB,CAAC,QAAQ,EAAK,OAAO,gCAA6B,CAAC,CAAC;IAExE,IAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;IAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAClE,oBAAoB,CAAC,QAAQ,EAAK,OAAO,gCAA6B,CAAC,CAAC;IAExE,OAAO,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,CAAC;AAChC;;ACiDA;;;;;;IAmBE,wBAAY,mBAAuF,EACvF,WAAuD;QADvD,oCAAA,EAAA,wBAAuF;QACvF,4BAAA,EAAA,gBAAuD;QACjE,IAAI,mBAAmB,KAAK,SAAS,EAAE;YACrC,mBAAmB,GAAG,IAAI,CAAC;SAC5B;aAAM;YACL,YAAY,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;SACtD;QAED,IAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAM,gBAAgB,GAAG,oCAAoC,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAEtG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE;YACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;aACpF;YACD,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,qDAAqD,CACnD,IAAqC,EACrC,gBAAgB,EAChB,aAAa,CACd,CAAC;SACH;aAAM;YAEL,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,wDAAwD,CACtD,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,aAAa,CACd,CAAC;SACH;KACF;IAKD,sBAAI,kCAAM;;;;aAAV;YACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMD,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;;;OAAA;;;;;;;IAQD,+BAAM,GAAN,UAAO,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC,CAAC;SAC/F;QAED,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC3C;IAqBD,kCAAS,GAAT,UACE,UAAyE;QAAzE,2BAAA,EAAA,sBAAyE;QAEzE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;SAC9C;QAED,IAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAEpE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAGlB;QAChC,OAAO,+BAA+B,CAAC,IAAqC,CAAC,CAAC;KAC/E;IAaD,oCAAW,GAAX,UACE,YAA8E,EAC9E,UAAqD;QAArD,2BAAA,EAAA,eAAqD;QAErD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,aAAa,CAAC,CAAC;SAChD;QACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAEvD,IAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC/E,IAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAEnE,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;SACvG;QACD,IAAI,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9C,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;SACvG;QAED,IAAM,OAAO,GAAG,oBAAoB,CAClC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAC5G,CAAC;QAEF,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,SAAS,CAAC,QAAQ,CAAC;KAC3B;IAUD,+BAAM,GAAN,UAAO,WAAiD,EACjD,UAAqD;QAArD,2BAAA,EAAA,eAAqD;QAC1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;QAED,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;SACpE;QACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;YAClC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QAED,IAAI,OAAmC,CAAC;QACxC,IAAI;YACF,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;SAC9D;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QACD,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE;YACvC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;SACH;QAED,OAAO,oBAAoB,CACzB,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CACrG,CAAC;KACH;;;;;;;;;;;;IAaD,4BAAG,GAAH;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,KAAK,CAAC,CAAC;SACxC;QAED,IAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAW,CAAC,CAAC;QAChD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;KACtC;IAcD,+BAAM,GAAN,UAAO,UAAwE;QAAxE,2BAAA,EAAA,sBAAwE;QAC7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAMA,2BAAyB,CAAC,QAAQ,CAAC,CAAC;SAC3C;QAED,IAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtE,OAAO,kCAAkC,CAAI,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAC3E;IAMH,qBAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;IAChD,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACzB,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC7B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAClE,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AACD,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;IAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,aAAa,EAAE;QACpE,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM;QACtC,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAkBD;AAEA;SACgB,oBAAoB,CAAI,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAiB,EACjB,aAAuD;IADvD,8BAAA,EAAA,iBAAiB;IACjB,8BAAA,EAAA,8BAAsD,OAAA,CAAC,GAAA,GAClD;IAE3C,IAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAChH,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;SACgB,wBAAwB,CACtC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C;IAE/C,IAAM,MAAM,GAAuB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACvG,iCAAiC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAEpH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAsB;IACtD,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,CAAC;SAEe,gBAAgB,CAAC,CAAU;IACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;QACzE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,cAAc,CAAC;AACrC,CAAC;SAQe,sBAAsB,CAAC,MAAsB;IAG3D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;SAEgB,oBAAoB,CAAI,MAAyB,EAAE,MAAW;IAC5E,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;QAC/B,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjD;IAED,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,eAAe;YAC9C,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC9C;IAED,IAAM,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAClF,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;SAEe,mBAAmB,CAAI,MAAyB;IAG9D,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEzB,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO;KACR;IAED,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;QAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,WAAW;YACtC,WAAW,CAAC,WAAW,EAAE,CAAC;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KAC1C;AACH,CAAC;SAEe,mBAAmB,CAAI,MAAyB,EAAE,CAAM;IAItE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IAExB,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,OAAO;KACR;IAED,gCAAgC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE5C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;QAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,WAAW;YACtC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;KAC1C;SAAM;QAGL,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAA,eAAe;YAC9C,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;KAC9C;AACH,CAAC;AAmBD;AAEA,SAASC,2BAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAAC,8BAA4B,IAAI,0CAAuC,CAAC,CAAC;AAChG;;SCjhBgB,0BAA0B,CAAC,IAA4C,EAC5C,OAAe;IACxD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,IAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;IAC1C,mBAAmB,CAAC,aAAa,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC3E,OAAO;QACL,aAAa,EAAE,yBAAyB,CAAC,aAAa,CAAC;KACxD,CAAC;AACJ;;ACNA;AACA,IAAM,sBAAsB,GAAG,UAAC,KAAsB;IACpD,OAAO,KAAK,CAAC,UAAU,CAAC;AAC1B,CAAC,CAAC;AACF,IAAI;IACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAE,MAAM,EAAE;QACpD,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAAC,WAAM;;;CAGP;AAED;;;;;;IASE,mCAAY,OAA4B;QACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAChE,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,uCAAuC,GAAG,OAAO,CAAC,aAAa,CAAC;KACtE;IAKD,sBAAI,oDAAa;;;;aAAjB;YACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,6BAA6B,CAAC,eAAe,CAAC,CAAC;aACtD;YACD,OAAO,IAAI,CAAC,uCAAuC,CAAC;SACrD;;;OAAA;IAKD,sBAAI,2CAAI;;;;aAAR;YACE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,6BAA6B,CAAC,MAAM,CAAC,CAAC;aAC7C;YACD,OAAO,sBAAsB,CAAC;SAC/B;;;OAAA;IACH,gCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;IAC3D,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QAC7E,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,6BAA6B,CAAC,IAAY;IACjD,OAAO,IAAI,SAAS,CAAC,yCAAuC,IAAI,qDAAkD,CAAC,CAAC;AACtH,CAAC;SAEe,2BAA2B,CAAC,CAAM;IAChD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;QACvF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;AAChD;;AC7EA;AACA,IAAM,iBAAiB,GAAG;IACxB,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AACF,IAAI;IACF,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE;QAC/C,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAAC,WAAM;;;CAGP;AAED;;;;;;IASE,8BAAY,OAA4B;QACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC3D,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,kCAAkC,GAAG,OAAO,CAAC,aAAa,CAAC;KACjE;IAKD,sBAAI,+CAAa;;;;aAAjB;YACE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBACjC,MAAM,wBAAwB,CAAC,eAAe,CAAC,CAAC;aACjD;YACD,OAAO,IAAI,CAAC,kCAAkC,CAAC;SAChD;;;OAAA;IAMD,sBAAI,sCAAI;;;;;aAAR;YACE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBACjC,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;aACxC;YACD,OAAO,iBAAiB,CAAC;SAC1B;;;OAAA;IACH,2BAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,EAAE;IACtD,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC3B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACxE,KAAK,EAAE,sBAAsB;QAC7B,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,wBAAwB,CAAC,IAAY;IAC5C,OAAO,IAAI,SAAS,CAAC,oCAAkC,IAAI,gDAA6C,CAAC,CAAC;AAC5G,CAAC;SAEe,sBAAsB,CAAC,CAAM;IAC3C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,EAAE;QAClF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,oBAAoB,CAAC;AAC3C;;SCxEgB,kBAAkB,CAAO,QAAkC,EAClC,OAAe;IACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;IAC5C,IAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;IAC9B,IAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,CAAC;IACtC,IAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QACzF,YAAY,cAAA;QACZ,KAAK,EAAE,KAAK,KAAK,SAAS;YACxB,SAAS;YACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAK,OAAO,6BAA0B,CAAC;QACzF,SAAS,EAAE,SAAS,KAAK,SAAS;YAChC,SAAS;YACT,mCAAmC,CAAC,SAAS,EAAE,QAAS,EAAK,OAAO,iCAA8B,CAAC;QACrG,YAAY,cAAA;KACb,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAA+C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AACtG,CAAC;AAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,UAA+C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,GAAA,CAAC;AACtG,CAAC;AAED,SAAS,mCAAmC,CAC1C,EAAsC,EACtC,QAA2B,EAC3B,OAAe;IAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,UAAC,KAAQ,EAAE,UAA+C,IAAK,OAAA,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,GAAA,CAAC;AACvH;;ACjCA;AAEA;;;;;;;;;IA2BE,yBAAY,cAAyD,EACzD,mBAA+D,EAC/D,mBAA+D;QAF/D,+BAAA,EAAA,mBAAyD;QACzD,oCAAA,EAAA,wBAA+D;QAC/D,oCAAA,EAAA,wBAA+D;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,cAAc,GAAG,IAAI,CAAC;SACvB;QAED,IAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QACzF,IAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAExF,IAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;SACxD;QACD,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;YAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;SACxD;QAED,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxE,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QACrE,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxE,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAErE,IAAI,oBAAgE,CAAC;QACrE,IAAM,YAAY,GAAG,UAAU,CAAO,UAAA,OAAO;YAC3C,oBAAoB,GAAG,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,yBAAyB,CACvB,IAAI,EAAE,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,CAC/G,CAAC;QACF,oDAAoD,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExE,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;YACnC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;SAC1E;aAAM;YACL,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACjC;KACF;IAKD,sBAAI,qCAAQ;;;;aAAZ;YACE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;OAAA;IAKD,sBAAI,qCAAQ;;;;aAAZ;YACE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;OAAA;IACH,sBAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE;IACjD,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC9B,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC/B,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACnE,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAwCD,SAAS,yBAAyB,CAAO,MAA6B,EAC7B,YAA2B,EAC3B,qBAA6B,EAC7B,qBAAqD,EACrD,qBAA6B,EAC7B,qBAAqD;IAC5F,SAAS,cAAc;QACrB,OAAO,YAAY,CAAC;KACrB;IAED,SAAS,cAAc,CAAC,KAAQ;QAC9B,OAAO,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,SAAS,cAAc,CAAC,MAAW;QACjC,OAAO,wCAAwC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjE;IAED,SAAS,cAAc;QACrB,OAAO,wCAAwC,CAAC,MAAM,CAAC,CAAC;KACzD;IAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAC9D,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAEtF,SAAS,aAAa;QACpB,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;KAC1D;IAED,SAAS,eAAe,CAAC,MAAW;QAClC,2CAA2C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;KACvC;IAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EACrE,qBAAqB,CAAC,CAAC;;IAG/D,MAAM,CAAC,aAAa,GAAG,SAAU,CAAC;IAClC,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;IAC/C,MAAM,CAAC,kCAAkC,GAAG,SAAU,CAAC;IACvD,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;QAC1E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,eAAe,CAAC;AACtC,CAAC;AAED;AACA,SAAS,oBAAoB,CAAC,MAAuB,EAAE,CAAM;IAC3D,oCAAoC,CAClC,MAAM,CAAC,SAAS,CAAC,yBAAiE,EAClF,CAAC,CACF,CAAC;IACF,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,2CAA2C,CAAC,MAAuB,EAAE,CAAM;IAClF,+CAA+C,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnF,4CAA4C,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC5F,IAAI,MAAM,CAAC,aAAa,EAAE;;;;QAIxB,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC/C;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAuB,EAAE,YAAqB;;IAIpF,IAAI,MAAM,CAAC,0BAA0B,KAAK,SAAS,EAAE;QACnD,MAAM,CAAC,kCAAkC,EAAE,CAAC;KAC7C;IAED,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC,UAAA,OAAO;QACpD,MAAM,CAAC,kCAAkC,GAAG,OAAO,CAAC;KACrD,CAAC,CAAC;IAEH,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,CAAC;AAED;AAEA;;;;;;IAaE;QACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IAKD,sBAAI,yDAAW;;;;aAAf;YACE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,oCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YAED,IAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,yBAAyB,CAAC;YAC/F,OAAO,6CAA6C,CAAC,kBAAwD,CAAC,CAAC;SAChH;;;OAAA;IAMD,kDAAO,GAAP,UAAQ,KAAqB;QAArB,sBAAA,EAAA,QAAW,SAAU;QAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,SAAS,CAAC,CAAC;SACvD;QAED,uCAAuC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtD;;;;;IAMD,gDAAK,GAAL,UAAM,MAAuB;QAAvB,uBAAA,EAAA,kBAAuB;QAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KACrD;;;;;IAMD,oDAAS,GAAT;QACE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,oCAAoC,CAAC,WAAW,CAAC,CAAC;SACzD;QAED,yCAAyC,CAAC,IAAI,CAAC,CAAC;KACjD;IACH,uCAAC;AAAD,CAAC,IAAA;AAED,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,SAAS,EAAE;IAClE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IAC1C,MAAM,CAAC,cAAc,CAAC,gCAAgC,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;QACpF,KAAK,EAAE,kCAAkC;QACzC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ;AAED;AAEA,SAAS,kCAAkC,CAAU,CAAM;IACzD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;QAC1E,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,YAAY,gCAAgC,CAAC;AACvD,CAAC;AAED,SAAS,qCAAqC,CAAO,MAA6B,EAC7B,UAA+C,EAC/C,kBAA+C,EAC/C,cAAmC;IAItF,UAAU,CAAC,0BAA0B,GAAG,MAAM,CAAC;IAC/C,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC;IAE/C,UAAU,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;IACpD,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;AAC9C,CAAC;AAED,SAAS,oDAAoD,CAAO,MAA6B,EAC7B,WAAuC;IACzG,IAAM,UAAU,GAAwC,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;IAElH,IAAI,kBAAkB,GAAG,UAAC,KAAQ;QAChC,IAAI;YACF,uCAAuC,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;YAC3E,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAAC,OAAO,gBAAgB,EAAE;YACzB,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;SAC9C;KACF,CAAC;IAEF,IAAI,cAAc,GAAwB,cAAM,OAAA,mBAAmB,CAAC,SAAS,CAAC,GAAA,CAAC;IAE/E,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE;QACvC,kBAAkB,GAAG,UAAA,KAAK,IAAI,OAAA,WAAW,CAAC,SAAU,CAAC,KAAK,EAAE,UAAU,CAAC,GAAA,CAAC;KACzE;IACD,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;QACnC,cAAc,GAAG,cAAM,OAAA,WAAW,CAAC,KAAM,CAAC,UAAU,CAAC,GAAA,CAAC;KACvD;IAED,qCAAqC,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,+CAA+C,CAAC,UAAiD;IACxG,UAAU,CAAC,mBAAmB,GAAG,SAAU,CAAC;IAC5C,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;AAC1C,CAAC;AAED,SAAS,uCAAuC,CAAI,UAA+C,EAAE,KAAQ;IAC3G,IAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IACrD,IAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;IAC5G,IAAI,CAAC,gDAAgD,CAAC,kBAAkB,CAAC,EAAE;QACzE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;KAC7E;;;IAKD,IAAI;QACF,sCAAsC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;KACnE;IAAC,OAAO,CAAC,EAAE;;QAEV,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;KACrC;IAED,IAAM,YAAY,GAAG,8CAA8C,CAAC,kBAAkB,CAAC,CAAC;IACxF,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;QAEzC,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC9C;AACH,CAAC;AAED,SAAS,qCAAqC,CAAC,UAAiD,EAAE,CAAM;IACtG,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,gDAAgD,CAAO,UAA+C,EAC/C,KAAQ;IACtE,IAAM,gBAAgB,GAAG,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAA,CAAC;QACxD,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC;KACT,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yCAAyC,CAAI,UAA+C;IACnG,IAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IACrD,IAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;IAE5G,oCAAoC,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAM,KAAK,GAAG,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC1D,2CAA2C,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;AAEA,SAAS,wCAAwC,CAAO,MAA6B,EAAE,KAAQ;IAG7F,IAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;IAErD,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,IAAM,yBAAyB,GAAG,MAAM,CAAC,0BAA0B,CACnB;QAChD,OAAO,oBAAoB,CAAC,yBAAyB,EAAE;YACrD,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,MAAM,QAAQ,CAAC,YAAY,CAAC;aAED;YAC7B,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;SAClF,CAAC,CAAC;KACJ;IAED,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,wCAAwC,CAAC,MAAuB,EAAE,MAAW;;;IAGpF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,wCAAwC,CAAO,MAA6B;;IAEnF,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAElC,IAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;IACrD,IAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,+CAA+C,CAAC,UAAU,CAAC,CAAC;;IAG5D,OAAO,oBAAoB,CAAC,YAAY,EAAE;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;YACjC,MAAM,QAAQ,CAAC,YAAY,CAAC;SAC7B;QACD,oCAAoC,CAAC,QAAQ,CAAC,yBAA+D,CAAC,CAAC;KAChH,EAAE,UAAA,CAAC;QACF,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,QAAQ,CAAC,YAAY,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED;AAEA,SAAS,yCAAyC,CAAC,MAAuB;;IAMxE,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;IAG9C,OAAO,MAAM,CAAC,0BAA0B,CAAC;AAC3C,CAAC;AAED;AAEA,SAAS,oCAAoC,CAAC,IAAY;IACxD,OAAO,IAAI,SAAS,CAClB,gDAA8C,IAAI,4DAAyD,CAAC,CAAC;AACjH,CAAC;AAED;AAEA,SAAS,yBAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,SAAS,CAClB,+BAA6B,IAAI,2CAAwC,CAAC,CAAC;AAC/E;;;;"} \ No newline at end of file diff --git a/node_modules/web-streams-polyfill/package.json b/node_modules/web-streams-polyfill/package.json index d50771b..af3208a 100644 --- a/node_modules/web-streams-polyfill/package.json +++ b/node_modules/web-streams-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "web-streams-polyfill", - "version": "3.2.0", + "version": "3.2.1", "description": "Web Streams, based on the WHATWG spec reference implementation", "main": "dist/polyfill", "browser": "dist/polyfill.min.js", diff --git a/node_modules/wide-align/LICENSE b/node_modules/wide-align/LICENSE old mode 100644 new mode 100755 diff --git a/node_modules/wide-align/README.md b/node_modules/wide-align/README.md old mode 100644 new mode 100755 diff --git a/node_modules/wide-align/align.js b/node_modules/wide-align/align.js old mode 100644 new mode 100755 diff --git a/node_modules/wide-align/package.json b/node_modules/wide-align/package.json old mode 100644 new mode 100755 diff --git a/node_modules/ws/README.md b/node_modules/ws/README.md index cab335b..97ab9fa 100644 --- a/node_modules/ws/README.md +++ b/node_modules/ws/README.md @@ -252,8 +252,8 @@ server.listen(8080); ### Client authentication ```js -import WebSocket from 'ws'; import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; const server = createServer(); const wss = new WebSocketServer({ noServer: true }); diff --git a/node_modules/ws/lib/websocket-server.js b/node_modules/ws/lib/websocket-server.js index d0a2978..bac30eb 100644 --- a/node_modules/ws/lib/websocket-server.js +++ b/node_modules/ws/lib/websocket-server.js @@ -230,21 +230,36 @@ class WebSocketServer extends EventEmitter { handleUpgrade(req, socket, head, cb) { socket.on('error', socketOnError); - const key = - req.headers['sec-websocket-key'] !== undefined - ? req.headers['sec-websocket-key'] - : false; + const key = req.headers['sec-websocket-key']; const version = +req.headers['sec-websocket-version']; - if ( - req.method !== 'GET' || - req.headers.upgrade.toLowerCase() !== 'websocket' || - !key || - !keyRegex.test(key) || - (version !== 8 && version !== 13) || - !this.shouldHandle(req) - ) { - return abortHandshake(socket, 400); + if (req.method !== 'GET') { + const message = 'Invalid HTTP method'; + abortHandshakeOrEmitwsClientError(this, req, socket, 405, message); + return; + } + + if (req.headers.upgrade.toLowerCase() !== 'websocket') { + const message = 'Invalid Upgrade header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (!key || !keyRegex.test(key)) { + const message = 'Missing or invalid Sec-WebSocket-Key header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (version !== 8 && version !== 13) { + const message = 'Missing or invalid Sec-WebSocket-Version header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (!this.shouldHandle(req)) { + abortHandshake(socket, 400); + return; } const secWebSocketProtocol = req.headers['sec-websocket-protocol']; @@ -254,7 +269,9 @@ class WebSocketServer extends EventEmitter { try { protocols = subprotocol.parse(secWebSocketProtocol); } catch (err) { - return abortHandshake(socket, 400); + const message = 'Invalid Sec-WebSocket-Protocol header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; } } @@ -279,7 +296,10 @@ class WebSocketServer extends EventEmitter { extensions[PerMessageDeflate.extensionName] = perMessageDeflate; } } catch (err) { - return abortHandshake(socket, 400); + const message = + 'Invalid or unacceptable Sec-WebSocket-Extensions header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; } } @@ -446,7 +466,7 @@ function emitClose(server) { } /** - * Handle premature socket errors. + * Handle socket errors. * * @private */ @@ -464,25 +484,52 @@ function socketOnError() { * @private */ function abortHandshake(socket, code, message, headers) { - if (socket.writable) { - message = message || http.STATUS_CODES[code]; - headers = { - Connection: 'close', - 'Content-Type': 'text/html', - 'Content-Length': Buffer.byteLength(message), - ...headers - }; + // + // The socket is writable unless the user destroyed or ended it before calling + // `server.handleUpgrade()` or in the `verifyClient` function, which is a user + // error. Handling this does not make much sense as the worst that can happen + // is that some of the data written by the user might be discarded due to the + // call to `socket.end()` below, which triggers an `'error'` event that in + // turn causes the socket to be destroyed. + // + message = message || http.STATUS_CODES[code]; + headers = { + Connection: 'close', + 'Content-Type': 'text/html', + 'Content-Length': Buffer.byteLength(message), + ...headers + }; - socket.write( - `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + - Object.keys(headers) - .map((h) => `${h}: ${headers[h]}`) - .join('\r\n') + - '\r\n\r\n' + - message - ); - } + socket.once('finish', socket.destroy); - socket.removeListener('error', socketOnError); - socket.destroy(); + socket.end( + `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + + Object.keys(headers) + .map((h) => `${h}: ${headers[h]}`) + .join('\r\n') + + '\r\n\r\n' + + message + ); +} + +/** + * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least + * one listener for it, otherwise call `abortHandshake()`. + * + * @param {WebSocketServer} server The WebSocket server + * @param {http.IncomingMessage} req The request object + * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} message The HTTP response body + * @private + */ +function abortHandshakeOrEmitwsClientError(server, req, socket, code, message) { + if (server.listenerCount('wsClientError')) { + const err = new Error(message); + Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError); + + server.emit('wsClientError', err, socket, req); + } else { + abortHandshake(socket, code, message); + } } diff --git a/node_modules/ws/lib/websocket.js b/node_modules/ws/lib/websocket.js index 6fff935..c4b1490 100644 --- a/node_modules/ws/lib/websocket.js +++ b/node_modules/ws/lib/websocket.js @@ -30,10 +30,11 @@ const { const { format, parse } = require('./extension'); const { toBuffer } = require('./buffer-util'); +const closeTimeout = 30 * 1000; +const kAborted = Symbol('kAborted'); +const protocolVersions = [8, 13]; const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED']; const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; -const protocolVersions = [8, 13]; -const closeTimeout = 30 * 1000; /** * Class representing a WebSocket. @@ -647,7 +648,7 @@ function initAsClient(websocket, address, protocols, options) { hostname: undefined, protocol: undefined, timeout: undefined, - method: undefined, + method: 'GET', host: undefined, path: undefined, port: undefined @@ -701,7 +702,7 @@ function initAsClient(websocket, address, protocols, options) { const defaultPort = isSecure ? 443 : 80; const key = randomBytes(16).toString('base64'); - const get = isSecure ? https.get : http.get; + const request = isSecure ? https.request : http.request; const protocolSet = new Set(); let perMessageDeflate; @@ -766,8 +767,11 @@ function initAsClient(websocket, address, protocols, options) { opts.path = parts[1]; } + let req; + if (opts.followRedirects) { if (websocket._redirects === 0) { + websocket._originalSecure = isSecure; websocket._originalHost = parsedUrl.host; const headers = options && options.headers; @@ -783,15 +787,21 @@ function initAsClient(websocket, address, protocols, options) { options.headers[key.toLowerCase()] = value; } } - } else if (parsedUrl.host !== websocket._originalHost) { - // - // Match curl 7.77.0 behavior and drop the following headers. These - // headers are also dropped when following a redirect to a subdomain. - // - delete opts.headers.authorization; - delete opts.headers.cookie; - delete opts.headers.host; - opts.auth = undefined; + } else if (websocket.listenerCount('redirect') === 0) { + const isSameHost = parsedUrl.host === websocket._originalHost; + + if (!isSameHost || (websocket._originalSecure && !isSecure)) { + // + // Match curl 7.77.0 behavior and drop the following headers. These + // headers are also dropped when following a redirect to a subdomain. + // + delete opts.headers.authorization; + delete opts.headers.cookie; + + if (!isSameHost) delete opts.headers.host; + + opts.auth = undefined; + } } // @@ -803,9 +813,24 @@ function initAsClient(websocket, address, protocols, options) { options.headers.authorization = 'Basic ' + Buffer.from(opts.auth).toString('base64'); } - } - let req = (websocket._req = get(opts)); + req = websocket._req = request(opts); + + if (websocket._redirects) { + // + // Unlike what is done for the `'upgrade'` event, no early exit is + // triggered here if the user calls `websocket.close()` or + // `websocket.terminate()` from a listener of the `'redirect'` event. This + // is because the user can also call `request.destroy()` with an error + // before calling `websocket.close()` or `websocket.terminate()` and this + // would result in an error being emitted on the `request` object with no + // `'error'` event listeners attached. + // + websocket.emit('redirect', websocket.url, req); + } + } else { + req = websocket._req = request(opts); + } if (opts.timeout) { req.on('timeout', () => { @@ -814,7 +839,7 @@ function initAsClient(websocket, address, protocols, options) { } req.on('error', (err) => { - if (req === null || req.aborted) return; + if (req === null || req[kAborted]) return; req = websocket._req = null; emitErrorAndClose(websocket, err); @@ -861,13 +886,18 @@ function initAsClient(websocket, address, protocols, options) { websocket.emit('upgrade', res); // - // The user may have closed the connection from a listener of the `upgrade` - // event. + // The user may have closed the connection from a listener of the + // `'upgrade'` event. // if (websocket.readyState !== WebSocket.CONNECTING) return; req = websocket._req = null; + if (res.headers.upgrade.toLowerCase() !== 'websocket') { + abortHandshake(websocket, socket, 'Invalid Upgrade header'); + return; + } + const digest = createHash('sha1') .update(key + GUID) .digest('base64'); @@ -947,10 +977,12 @@ function initAsClient(websocket, address, protocols, options) { skipUTF8Validation: opts.skipUTF8Validation }); }); + + req.end(); } /** - * Emit the `'error'` and `'close'` event. + * Emit the `'error'` and `'close'` events. * * @param {WebSocket} websocket The WebSocket instance * @param {Error} The error to emit @@ -1007,6 +1039,7 @@ function abortHandshake(websocket, stream, message) { Error.captureStackTrace(err, abortHandshake); if (stream.setHeader) { + stream[kAborted] = true; stream.abort(); if (stream.socket && !stream.socket.destroyed) { @@ -1018,8 +1051,7 @@ function abortHandshake(websocket, stream, message) { stream.socket.destroy(); } - stream.once('abort', websocket.emitClose.bind(websocket)); - websocket.emit('error', err); + process.nextTick(emitErrorAndClose, websocket, err); } else { stream.destroy(err); stream.once('error', websocket.emit.bind(websocket, 'error')); diff --git a/node_modules/ws/package.json b/node_modules/ws/package.json index 57ddc7e..2a176c8 100644 --- a/node_modules/ws/package.json +++ b/node_modules/ws/package.json @@ -1,6 +1,6 @@ { "name": "ws", - "version": "8.5.0", + "version": "8.7.0", "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", "keywords": [ "HyBi", diff --git a/package-lock.json b/package-lock.json index d7b7535..dffc06c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,12 +26,12 @@ } }, "node_modules/@devnote-dev/pterojs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devnote-dev/pterojs/-/pterojs-1.2.0.tgz", - "integrity": "sha512-Wjres4qZ0pq98fiQ6LYrIjNEa+Qesn1/o4dQffBXcrhDcvJ8yCP8fCRTTb3LvhbLtlAP6Th03Yf2lkjRZGIECA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@devnote-dev/pterojs/-/pterojs-1.4.2.tgz", + "integrity": "sha512-XmIjhyy5QF8Bg27nn6sUEMDx/2vGryR0glBk4rpK88unwXOIXCzR9DLep96rMS9LtUImPldevQ2Csi+jQDqqkw==", "dependencies": { - "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "node-fetch": "^2.6.7", + "ws": "^8.5.0" } }, "node_modules/@devnote-dev/pterojs/node_modules/node-fetch": { @@ -196,7 +196,7 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/asn1": { "version": "0.2.6", @@ -209,7 +209,7 @@ "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "engines": { "node": ">=0.8" } @@ -217,12 +217,12 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "engines": { "node": "*" } @@ -253,7 +253,7 @@ "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dependencies": { "tweetnacl": "^0.14.3" } @@ -267,23 +267,26 @@ } }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/brace-expansion": { @@ -308,10 +311,22 @@ "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/chownr": { "version": "2.0.0", @@ -370,9 +385,9 @@ } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -380,12 +395,12 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cross-fetch": { "version": "3.1.5", @@ -423,7 +438,7 @@ "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dependencies": { "assert-plus": "^1.0.0" }, @@ -450,7 +465,7 @@ "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } @@ -461,17 +476,21 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-libc": { "version": "2.0.1", @@ -484,7 +503,7 @@ "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -501,7 +520,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -511,7 +530,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -519,48 +538,49 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -577,7 +597,7 @@ "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" ] @@ -593,9 +613,9 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fetch-blob": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", "funding": [ { "type": "github", @@ -615,16 +635,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -634,7 +654,7 @@ "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "engines": { "node": "*" } @@ -674,7 +694,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -682,7 +702,7 @@ "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, "node_modules/fs-minipass": { "version": "2.1.0", @@ -700,6 +720,11 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -719,10 +744,23 @@ "node": ">=10" } }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { "assert-plus": "^1.0.0" } @@ -749,7 +787,7 @@ "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "engines": { "node": ">=4" } @@ -767,30 +805,52 @@ "node": ">=6" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -883,7 +943,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/isarray": { "version": "1.0.0", @@ -893,12 +953,12 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/json-schema": { "version": "0.4.0", @@ -913,7 +973,7 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/jsonwebtoken": { "version": "8.5.1", @@ -1053,7 +1113,7 @@ "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } @@ -1061,12 +1121,12 @@ "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } @@ -1083,19 +1143,19 @@ } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -1149,7 +1209,7 @@ "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/mysql": { "version": "2.18.1", @@ -1202,9 +1262,9 @@ } }, "node_modules/node-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.0.tgz", - "integrity": "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.5.tgz", + "integrity": "sha512-u7zCHdJp8JXBwF09mMfo2CL6kp37TslDl1KP3hRGTlCInBtag+UO3LGVy+NF0VzvnL3PVMpA2hXh1EtECFnyhQ==", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -1259,10 +1319,18 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -1297,12 +1365,12 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/process-nextick-args": { "version": "2.0.1", @@ -1335,9 +1403,12 @@ } }, "node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -1354,12 +1425,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -1389,7 +1460,7 @@ "node_modules/readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "node_modules/request": { "version": "2.88.2", @@ -1492,23 +1563,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -1520,14 +1591,14 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -1543,6 +1614,19 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -1581,11 +1665,11 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/string_decoder": { @@ -1752,10 +1836,15 @@ "extsprintf": "^1.2.0" } }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, "node_modules/web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "engines": { "node": ">= 8" } @@ -1788,9 +1877,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "engines": { "node": ">=10.0.0" }, @@ -1815,12 +1904,12 @@ }, "dependencies": { "@devnote-dev/pterojs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@devnote-dev/pterojs/-/pterojs-1.2.0.tgz", - "integrity": "sha512-Wjres4qZ0pq98fiQ6LYrIjNEa+Qesn1/o4dQffBXcrhDcvJ8yCP8fCRTTb3LvhbLtlAP6Th03Yf2lkjRZGIECA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@devnote-dev/pterojs/-/pterojs-1.4.2.tgz", + "integrity": "sha512-XmIjhyy5QF8Bg27nn6sUEMDx/2vGryR0glBk4rpK88unwXOIXCzR9DLep96rMS9LtUImPldevQ2Csi+jQDqqkw==", "requires": { - "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "node-fetch": "^2.6.7", + "ws": "^8.5.0" }, "dependencies": { "node-fetch": { @@ -1941,7 +2030,7 @@ "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "asn1": { "version": "0.2.6", @@ -1954,17 +2043,17 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { "version": "1.11.0", @@ -1988,7 +2077,7 @@ "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "requires": { "tweetnacl": "^0.14.3" } @@ -1999,20 +2088,22 @@ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" } }, "brace-expansion": { @@ -2034,10 +2125,19 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "chownr": { "version": "2.0.0", @@ -2081,19 +2181,19 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cross-fetch": { "version": "3.1.5", @@ -2121,7 +2221,7 @@ "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "requires": { "assert-plus": "^1.0.0" } @@ -2142,7 +2242,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegates": { "version": "1.0.0", @@ -2150,14 +2250,14 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-libc": { "version": "2.0.1", @@ -2167,7 +2267,7 @@ "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -2184,7 +2284,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "emoji-regex": { "version": "8.0.0", @@ -2194,50 +2294,51 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -2251,7 +2352,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, "fast-deep-equal": { "version": "3.1.3", @@ -2264,32 +2365,32 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fetch-blob": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, "form-data": { "version": "2.3.3", @@ -2317,12 +2418,12 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, "fs-minipass": { "version": "2.1.0", @@ -2337,6 +2438,11 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -2353,10 +2459,20 @@ "wide-align": "^1.1.2" } }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "requires": { "assert-plus": "^1.0.0" } @@ -2377,7 +2493,7 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" }, "har-validator": { "version": "5.1.5", @@ -2388,27 +2504,40 @@ "har-schema": "^2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -2479,7 +2608,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "isarray": { "version": "1.0.0", @@ -2489,12 +2618,12 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "json-schema": { "version": "0.4.0", @@ -2509,7 +2638,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "jsonwebtoken": { "version": "8.5.1", @@ -2631,17 +2760,17 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "mime": { "version": "1.6.0", @@ -2649,16 +2778,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "minimatch": { @@ -2694,7 +2823,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "mysql": { "version": "2.18.1", @@ -2730,9 +2859,9 @@ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.0.tgz", - "integrity": "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.5.tgz", + "integrity": "sha512-u7zCHdJp8JXBwF09mMfo2CL6kp37TslDl1KP3hRGTlCInBtag+UO3LGVy+NF0VzvnL3PVMpA2hXh1EtECFnyhQ==", "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -2768,10 +2897,15 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -2797,12 +2931,12 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "process-nextick-args": { "version": "2.0.1", @@ -2829,9 +2963,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } }, "range-parser": { "version": "1.2.1", @@ -2839,12 +2976,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -2873,7 +3010,7 @@ "readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "request": { "version": "2.88.2", @@ -2941,23 +3078,23 @@ } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "ms": { @@ -2968,14 +3105,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "set-blocking": { @@ -2988,6 +3125,16 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -3015,9 +3162,9 @@ } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "string_decoder": { "version": "1.1.1", @@ -3147,12 +3294,19 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + } } }, "web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, "webidl-conversions": { "version": "3.0.1", @@ -3182,9 +3336,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "requires": {} }, "yallist": { diff --git a/server.js b/server.js index 62418a8..7d23477 100644 --- a/server.js +++ b/server.js @@ -10,6 +10,19 @@ const req = require('express/lib/request'); const bodyParser = require('body-parser') const bcrypt = require('bcrypt') const app = express(); + +function logger(msg) { + let date_ob = new Date();; + let date = ("0" + date_ob.getDate()).slice(-2); + let month = ("0" + (date_ob.getMonth() + 1)).slice(-2); + let year = date_ob.getFullYear(); + let hours = date_ob.getHours(); + let minutes = date_ob.getMinutes(); + let seconds = date_ob.getSeconds(); + console.log('[' + year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds + '] ' + msg) + fs.appendFileSync('latest.log', '[' + year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds + '] ' + msg + '\n') +} + const PORT = 400 var ipInfo = "" const pterodactyl_api_key = "n6ZIvdfORa4WOUE8xFFTSnB7s8atEHTAZKDdxFnjUW92kklK" @@ -21,7 +34,10 @@ var connection = mysql.createConnection({ database : 'mercurycloud_api' }); -console.log(` +logger(` + + + ███╗ ███╗███████╗██████╗ ██████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ █████╗ ██████╗ ██╗ ████╗ ████║██╔════╝██╔══██╗██╔════╝██║ ██║██╔══██╗╚██╗ ██╔╝ ██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗ ██╔══██╗██╔══██╗██║ ██╔████╔██║█████╗ ██████╔╝██║ ██║ ██║██████╔╝ ╚████╔╝ ██║ ██║ ██║ ██║██║ ██║██║ ██║ ███████║██████╔╝██║ @@ -30,22 +46,11 @@ console.log(` ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝`); connection.connect(function(err) { if (err) { - console.error(` [ERROR] Database error !\n${err.stack}`); + logger(` [ERROR] Database error !\n ${err.stack}`); return; } - - console.log(` [INFO] Database succefull connected ! (${connection.threadId})`); - function logger() { - let date_ob = new Date();; - let date = ("0" + date_ob.getDate()).slice(-2); - let month = ("0" + (date_ob.getMonth() + 1)).slice(-2); - let year = date_ob.getFullYear(); - let hours = date_ob.getHours(); - let minutes = date_ob.getMinutes(); - let seconds = date_ob.getSeconds(); - console.log('[' + year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds + '] [DEBUG] GET from : ' + ipInfo.clientIp.split("::ffff:")[1]) - fs.appendFileSync('latest.log', '[' + year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds + '] [DEBUG] GET from : ' + ipInfo.clientIp.split("::ffff:")[1] + '\n') -} + logger(` [INFO] Database succefull connected ! (${connection.threadId})`); + app.use((req, res, next) => { res.append('Access-Control-Allow-Origin', ['*']); @@ -86,7 +91,7 @@ app.post('/api/create_ptero_services', jsonParser, function (req, res) { 'skip_scripts': req.body.skip_scripts, 'oom_disabled': req.body.oom_disabled, } - console.log(req.body) + logger(req.body) fetch("https://panel.mercucyrcloud.fr/api/application/servers", { "method": "POST", @@ -96,12 +101,12 @@ app.post('/api/create_ptero_services', jsonParser, function (req, res) { "Authorization": `Bearer ${pterodactyl_api_key}`, }, "body": JSON.stringify(req.body) - }).then(response => console.log(response)) + }).then(response => logger(response)) .catch(err => console.error(err)).then(() => {res.send("OK !")}) }) app.post('/api/order-form', jsonParser, function (req, res) { - console.log(req.body) + logger(req.body) res.json({"response": "OK"}) }) @@ -116,7 +121,7 @@ app.post('/api/login-user', jsonParser, function (req, res) { if (result === true) { var sql = `SELECT * FROM users WHERE mail = '${req.body.mail}'`; connection.query(sql, function (err, result) { - if (err) throw err; + if (err) {logger(" [ERROR] Database error\n " + err)}; res.json({'error': false, 'uuid': result[0].uuid, 'token': result[0].token}) }); } else { @@ -125,27 +130,26 @@ app.post('/api/login-user', jsonParser, function (req, res) { }); } }); - console.log(req.body) + logger(req.body) }) app.post('/api/create-user', jsonParser, function (req, res) { bcrypt.hash(req.body.password, 10, function(err, hash) { var sql = `INSERT INTO users (uuid, username, mail, token, password, balance, tickets, services, suspend_services, alerts) VALUES('${uuid.v4()}', '${req.body.username}', '${req.body.mail.toLowerCase()}', '${crypto.randomBytes(20).toString('hex')}', '${hash}', 0, 0, 0, 0, 0)`; connection.query(sql, function (err, result) { - if (err) throw err; + if (err) {logger(" [ERROR] Database error\n " + err)}; }); }); - console.log(" [INFO] User " + req.body.username + " created !") + logger(" [INFO] User " + req.body.username + " created !") res.json({"response": "OK"}) }) app.get('/', (req, res) => { ipInfo = getIP(req); - logger() - console.log(req.query) + logger(' [DEBUG] GET from : ' + ipInfo.clientIp.split("::ffff:")[1]) var sql = `SELECT token FROM users WHERE uuid = '${req.query.uuid}'`; connection.query(sql, function (err, result) { - if (err) throw err; + if (err) {logger(" [ERROR] Database error\n " + err)}; if (result.length == 0) { res.json({'error': true, 'code': 404}) } else { @@ -207,5 +211,5 @@ app.get('/', (req, res) => { }); }); app.listen(PORT, () => - console.log(` [INFO] MercuryCloud API listening on http://localhost:${PORT}/ !`)); -}); \ No newline at end of file + logger(` [INFO] MercuryCloud API listening on http://localhost:${PORT}/ !`)); +});